作者:Cavien 文章來源:[url]http://bbs.cavien.com/ [/url]上傳日期:2006-09-25
String s1 = "我是中國人";
String s2 = "imchinese";
String s3 = "im中國人";
System.out.println(s1+":"+new String(s1).length());
System.out.println(s2+":"+new String(s2).length());
System.out.println(s3+":"+new String(s3).length());
OUTPUT:
我是中國人:5
imchinese:9
im中國人:5
看到了吧,字符串裏如果有雙字節的字符java就把每個字符都按雙字節編碼,如果都是單字節的字符就按單字節編碼
於是按照以上的規律,判斷字符串的長度和字符字節的長度是否相同來判斷是否有雙字節的字符
System.out.println((s1.getBytes().length == s1.length())?"s1無漢字":"s1有漢字");
System.out.println((s2.getBytes().length == s2.length())?"s2無漢字":"s2有漢字");
System.out.println((s3.getBytes().length == s3.length())?"s3無漢字":"s3有漢字");
OUTPUT:
s1有漢字
s2無漢字
s3有漢字 //
且慢,這樣誠然可以判斷出來一個串中是否有雙字節編碼的字符,但是要精確判斷是否有漢字就有些麻煩了,我們知道還有許多其他國家的字符在Unicode中是雙字節的.
於是,需要進一步確定漢字的編碼範圍怎麼確定呢,我用了一個本辦法那就是現在記事本輸出0-65535之間的字符,通過觀察發現第一個漢字是'一'最後一個是'??'(現在我也不認識);這下好了判斷漢字就容易多了比如我們可以通過比較字符的編碼範圍,最後給大家一些我試驗的結果漢字基本集中在[19968,40869]之間,共有20901個漢字(是不是少了點,算算你能認識多少) .