Java 判斷字串中是否含有漢字.

悠悠隱於市發表於2011-02-26
java判斷是否為漢字和是否有漢字的方法
關鍵字: java 漢字 方法 
Java程式碼 
public boolean vd(String str){   
     
    char[] chars=str.toCharArray();    
    boolean isGB2312=false;    
    for(int i=0;i<chars.length;i++){   
                byte[] bytes=(""+chars[i]).getBytes();    
                if(bytes.length==2){    
                            int[] ints=new int[2];    
                            ints[0]=bytes[0]& 0xff;    
                            ints[1]=bytes[1]& 0xff;    
                            if(ints[0]>=0x81 && ints[0]<=0xFE && ints[1]>=0x40 && ints[1]<=0xFE){    
                                        isGB2312=true;    
                                        break;    
                            }    
                }    
    }    
    return isGB2312;    
}  

public boolean vd(String str){
  
    char[] chars=str.toCharArray(); 
    boolean isGB2312=false; 
    for(int i=0;i<chars.length;i++){
                byte[] bytes=(""+chars[i]).getBytes(); 
                if(bytes.length==2){ 
                            int[] ints=new int[2]; 
                            ints[0]=bytes[0]& 0xff; 
                            ints[1]=bytes[1]& 0xff; 
                            if(ints[0]>=0x81 && ints[0]<=0xFE && ints[1]>=0x40 && ints[1]<=0xFE){ 
                                        isGB2312=true; 
                                        break; 
                            } 
                } 
    } 
    return isGB2312; 
}




首先要import java.util.regex.Pattern 和 java.util.regex.Matcher 
這兩個包,接下來是程式碼 

Java程式碼 
public boolean isNumeric(String str)   
{   
       Pattern pattern = Pattern.compile(”[0-9]*”);   
       Matcher isNum = pattern.matcher(str);   
       if( !isNum.matches() ) {   
          return false;   
       }   
       return true;   
}   
  
java.lang.Character.isDigit(ch[0])  

public boolean isNumeric(String str)
{
       Pattern pattern = Pattern.compile(”[0-9]*”);
       Matcher isNum = pattern.matcher(str);
       if( !isNum.matches() ) {
          return false;
       }
       return true;
}

java.lang.Character.isDigit(ch[0])

-----------------另一種----------------- 
Java程式碼 
public static void main(String[] args) {       
        int count = 0;       
         String regEx = "[\\u4e00-\\u9fa5]";       
        //System.out.println(regEx);       
         String str = "中文fdas ";       
        //System.out.println(str);       
         Pattern p = Pattern.compile(regEx);       
         Matcher m = p.matcher(str);       
        while (m.find()) {       
            for (int i = 0; i <= m.groupCount(); i++) {       
                 count = count + 1;       
             }       
         }       
         System.out.println("共有 " + count + "個 ");       
     }     

public static void main(String[] args) {    
        int count = 0;    
         String regEx = "[\\u4e00-\\u9fa5]";    
        //System.out.println(regEx);    
         String str = "中文fdas ";    
        //System.out.println(str);    
         Pattern p = Pattern.compile(regEx);    
         Matcher m = p.matcher(str);    
        while (m.find()) {    
            for (int i = 0; i <= m.groupCount(); i++) {    
                 count = count + 1;    
             }    
         }    
         System.out.println("共有 " + count + "個 ");    
     }   ------------------------------------------------------------------- 

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

java用的是Unicode 編碼char 型變數的範圍是0-65535 無符號的值,可以表示 65536個字元,基本上地球上的字元可被全部包括了,實際中,我們希望判斷一個字元是不是漢字,或者一個字串裡的字元是否有漢字來滿足業務上的需求,String類中有個這樣的方法可得到其字元長度length() ,看下面例子, 
Java程式碼 
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());  

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就把每個字元都按雙位元組編碼,如果都是單位元組的字元就按單位元組編碼 
於是按照以上的規律,結合一位QQ暱稱 ?G茶?I珠海 兄的提示由以下解決方法,就是判斷字串的長度和字元位元組的長度是否相同來判斷是否有雙位元組的字元 
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有漢字");  

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個漢字(是不是少了點,算算你能認識多少) 

 

 

 

轉載:

http://yaoyanzhu.iteye.com/blog/418448

相關文章