欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java 完美判断中文字符的方法

程序员文章站 2023-11-17 14:35:58
java判断一个字符串是否有中文一般情况是利用unicode编码(cjk统一汉字的编码区间:0x4e00–0x9fbb)的正则来做判断,但是其实这个区间来判断中文不是非常精...

java判断一个字符串是否有中文一般情况是利用unicode编码(cjk统一汉字的编码区间:0x4e00–0x9fbb)的正则来做判断,但是其实这个区间来判断中文不是非常精确,因为有些中文的标点符号比如:,。等等是不能识别的。

以下是比较完善的判断方法:charutil.java

复制代码 代码如下:

import java.util.regex.pattern;

public class charutil {

    public static void main(string[] args) {
        string[] strarr = new string[] { "www.micmiu.com", "!@#$%^&*()_+{}[]|\"'?/:;<>,.", "!¥……()——:;“”‘'《》,。?、", "不要啊", "やめて", "韩佳人", "???" };
        for (string str : strarr) {
            system.out.println("===========> 测试字符串:" + str);
            system.out.println("正则判断结果:" + ischinesebyreg(str) + " -- " + ischinesebyname(str));
            system.out.println("unicode判断结果 :" + ischinese(str));
            system.out.println("详细判断列表:");
            char[] ch = str.tochararray();
            for (int i = 0; i < ch.length; i++) {
                char c = ch[i];
                system.out.println(c + " --> " + (ischinese(c) ? "是" : "否"));
            }
        }
    }

    // 根据unicode编码完美的判断中文汉字和符号
    private static 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.cjk_unified_ideographs_extension_b
                || ub == character.unicodeblock.cjk_symbols_and_punctuation || ub == character.unicodeblock.halfwidth_and_fullwidth_forms
                || ub == character.unicodeblock.general_punctuation) {
            return true;
        }
        return false;
    }

    // 完整的判断中文汉字和符号
    public static 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;
    }

    // 只能判断部分cjk字符(cjk统一汉字)
    public static boolean ischinesebyreg(string str) {
        if (str == null) {
            return false;
        }
        pattern pattern = pattern.compile("[\\u4e00-\\u9fbf]+");
        return pattern.matcher(str.trim()).find();
    }

    // 只能判断部分cjk字符(cjk统一汉字)
    public static boolean ischinesebyname(string str) {
        if (str == null) {
            return false;
        }
        // 大小写不同:\\p 表示包含,\\p 表示不包含
        // \\p{cn} 的意思为 unicode 中未被定义字符的编码,\\p{cn} 就表示 unicode中已经被定义字符的编码
        string reg = "\\p{incjk unified ideographs}&&\\p{cn}";
        pattern pattern = pattern.compile(reg);
        return pattern.matcher(str.trim()).find();
    }
}