Java文字列に中国語文字が含まれているかどうかをチェック


大神の人工知能のチュートリアルを強くお勧めします.http://www.captainbed.net/zhanghan
【前言】
       最近のプロジェクトのメールサービスは外国の第三者に対してメールの通路を送って、第三者はメールの内容に対して制限があって、中国語の文字を含んではいけません(呼び出しの結果を含んで必ず失敗します)、だから送信する前にメールの内容に対して検査をして、中国語が含まれているかどうかを見て、もし含んでいるならば直接メールの送信状態を失敗に変えて、第三者を呼び出す必要はありません;
【探索の旅】
       巨人の肩に立って、すぐにネット上でJavaがどのように文字列の中に中国語が含まれているかどうかを判断するかについて検索します.やはりネット上には多くの実現があります.
       一、実現方式一
       1、文字ごとの判断:       
 
public static boolean isChinese(String str) throws UnsupportedEncodingException
    {
        int len = str.length();
        for(int i = 0;i < len;i ++)
        {
            String temp = URLEncoder.encode(str.charAt(i) + "", "utf-8");
            if(temp.equals(str.charAt(i) + ""))
                continue;
            String[] codes = temp.split("%");
            //         (       ,        )
            for(String code:codes)
            {
                if(code.compareTo("40") > 0)
                    return true;
            }
        }
        return false;
    }

     2、メリットとデメリット:        
 
                  a.欠点:効率が低い【文字列の各文字を毎回循環検出する必要がある】(送信するたびにメールの内容を検出する必要があり、各内容には多くの文字がある);
                  b.利点:中国語の漢字だけでなく、中国語の句読点も検出できる.
       二、実現方式二        
       1、正規表現を使う:
 
    public static boolean isContainChinese(String str) {

        Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
        Matcher m = p.matcher(str);
        if (m.find()) {
            return true;
        }
        return false;
    }

 
       2、メリットとデメリット:        
                  a.欠点:中国語の漢字しか検出できず、中国語の句読点を検出できない.
                  b.利点:利用正則効率が高い;
      三、方程式三
       1、改造正則
 
    /**
     *          
     *
     * @param str       
     * @return true         false        
     * @throws EmptyException
     */
    public static boolean isContainChinese(String str) throws EmptyException {

        if (StringUtils.isEmpty(str)) {
            throw new EmptyException("sms context is empty!");
        }
        Pattern p = Pattern.compile("[\u4E00-\u9FA5|\\!|\\,|\\。|\\(|\\)|\\《|\\》|\\“|\\”|\\?|\\:|\\;|\\【|\\】]");
        Matcher m = p.matcher(str);
        if (m.find()) {
            return true;
        }
        return false;
    }

 
       2、メリットとデメリット:
                  a.利点:効率が高く、中国語の漢字と中国語の句読点を検出できる.
                  b.欠点:まだ発見されていない.                  
【まとめ】
        1、巨人の肩に立って、もっと調べて、もっと比較します.
        2、プログラムの绝えない最適化に対して、例えば第1の方式は文字列の量が大きいことを循环してサーバーのCPUを崩しやすいです.