判斷java String中是否有漢字的方法

作者:Cavien     文章來源:[url]http://bbs.cavien.com/   [/url]上傳日期:2006-09-25
 
java用的是Unicode 編碼char 型變量的範圍是0-65535 無符號的值,可以表示 65536個字符,基本上地球上的字符可被全部包括了,實際中,我們希望判斷一個字符是不是漢字,或者一個字符串裏的字符是否有漢字來滿足業務上的需求,String類中有個這樣的方法可得到其字符長度length() ,看下面例子,

          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個漢字(是不是少了點,算算你能認識多少) .
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章