對於任意字符串,按照字節數來截取字符串長度

這個題目出自java程序員面試寶典,我看了半天覺得代碼有點小問題,做了點小修改,同時覺得這個題目蠻有意思,在此貼出來給大家討論下:

描述: 編寫一個截取字符串的函數,輸入爲一個字符串和字節數,輸出爲按字節截取的字符串。但是要保證漢字不被截取半個,如”我 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 s1 = "中";和String s2 = "f";s1.length() = s2.length() = 1;但是s1.getBytes().length = 2; s2.getBytes().length = 1;是否爲漢字通過這裏來區別,當碰到漢字時,我們就讓字節總數減1處理,當沒有超過總數count時,我們添加到StringBuffer中。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章