Java精确判断一个字符串是否含有中文

  Java判断一个字符串是否有中文的一般情况是利用Unicode编码(CJK统一汉字的编码区间0x4e00–0x9fbb)的正则来判断,但是其实这个区间来判断中文不是非常精确。因为有些中文的标点符号比如:,。等等是不能识别的,而且利用区间判断中文效率也并不高。例如:str.substring(i, i + 1).matches("[\\u4e00-\\u9fbb]+")就需要遍历整个字符串,如果字符串太长效率非常低,而且判断标点还会错误。这里提高一个高效准确的判断方法。


public class CharUtil {

    public static void main(String[] args) {
        System.out.println(isChinese("き"));//false
        System.out.println(isChinese("test,.?!%^&*(){}[]"));//false
        System.out.println(isChinese("测试"));//true
        System.out.println(isChinese("“测试”,。?!%……&*()——{}【】”"));//true
    }
    // GENERAL_PUNCTUATION 判断中文的“号
    // CJK_SYMBOLS_AND_PUNCTUATION 判断中文的。号
    // HALFWIDTH_AND_FULLWIDTH_FORMS 判断中文的,号
    private static final boolean isChinese(char c) {
        Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
        if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
                || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
                || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
                || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
                || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
                || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
            return true;
        }
        return false;
    }

    public static final boolean isChinese(String strName) {
        char[] ch = strName.toCharArray();
        for (int i = 0; i < ch.length; i++) {
            char c = ch[i];
            if (isChinese(c)) {
                return true;
            }
        }
        return false;
    }

    public static final boolean isChineseCharacter(String chineseStr) {
        char[] charArray = chineseStr.toCharArray();
        for (int i = 0; i < charArray.length; i++) {
            if ((charArray[i] >= 0x4e00) && (charArray[i] <= 0x9fbb)) {
                return true;
            }
        }
        return false;
    }

}

  

你可能感兴趣的:(Java精确判断一个字符串是否含有中文)