任意の文字列について、文字列の長さをバイト数で切り取ります.
このテーマはjavaプログラマーの面接の宝典から出て、私は半日見てコードが少し小さい問題だと思って、少し修正して、同時にこのテーマがとても面白いと思って、ここで貼ってみんなに討論します:
説明:文字列を切り取る関数を作成し、文字列とバイト数を入力し、バイト単位で切り取る文字列として出力します.しかし、漢字が半分に切り取られないことを保証するには、「私ABC」、4」のように、「私AB」に切り取り、「私ABC漢DEF」、6」と入力し、「私ABC」ではなく「私ABC+漢の半分の漢字」に出力しなければならない.(ある会社の面接問題)
結果:
説明:文字列を切り取る関数を作成し、文字列とバイト数を入力し、バイト単位で切り取る文字列として出力します.しかし、漢字が半分に切り取られないことを保証するには、「私ABC」、4」のように、「私AB」に切り取り、「私ABC漢DEF」、6」と入力し、「私ABC」ではなく「私ABC+漢の半分の漢字」に出力しなければならない.(ある会社の面接問題)
import java.io.IOException;
import java.io.UnsupportedEncodingException;
public class TestString {
public static void main(String[] args) throws IOException {
String s1 = "3 ABC chinese";
String s2 = " ";
int count = 9;
char c;
String original = new String(s1.getBytes("gbk"),"gbk");
System.out.println(original);
StringBuffer sb = new StringBuffer("");
if(s1 != null && !s1.equals("")){
if(count > 0 && count < original.length()){
for(int i = 0; i < count ; i++){
c = original.charAt(i);
// System.out.println("c:"+c);
if(String.valueOf(c).getBytes().length > 1){
--count;
if(i < count){
sb.append(c);
}
}
else{
sb.append(c);
}
}
}
}
System.out.println(sb.toString());
System.out.println(sb.toString().length());
}
}
結果:
3 ABC chinese
3 ABC
7
ここで重要なのは、文字cが漢字であるか否かを判断することであり、漢字と非漢字文字のバイト数は異なるが、String s 1=「中」である場合である.とString s 2="f";s1.length() = s2.length() = 1;しかしs 1.getBytes().length = 2; s2.getBytes().length = 1;漢字であるかどうかはここで区別しますが、漢字に遭遇した場合はバイト総数を1に減らし、総数countを超えない場合はStringBufferに追加します.