• Java判断一个字符串是否有中文


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

    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();
        }
    }

    输出:

    ===========> 测试字符串:www.micmiu.com
    正则判断结果:false -- false
    Unicode判断结果 :false
    详细判断列表:
    w --> 否
    w --> 否
    w --> 否
    . --> 否
    m --> 否
    i --> 否
    c --> 否
    m --> 否
    i --> 否
    u --> 否
    . --> 否
    c --> 否
    o --> 否
    m -->===========> 测试字符串:!@#$%^&*()_+{}[]|"'?/:;<>,.
    正则判断结果:false -- false
    Unicode判断结果 :false
    详细判断列表:
    ! --> 否
    @ --> 否
    # --> 否
    $ -->% -->^ -->& -->* --> 否
    ( --> 否
    ) --> 否
    _ -->+ --> 否
    { --> 否
    } --> 否
    [ --> 否
    ] -->| -->" --> 否
    ' --> 否
    ? -->/ --> 否
    : --> 否
    ; -->< -->> --> 否
    , --> 否
    . -->===========> 测试字符串:!¥……()——:;“”‘’《》,。?、
    正则判断结果:false -- false
    Unicode判断结果 :true
    详细判断列表:
    ! --> 是
    ¥ --> 是
    … --> 是
    … --> 是
    ( --> 是
    ) --> 是
    — --> 是
    — --> 是
    : --> 是
    ; --> 是
    “ --> 是
    ” --> 是
    ‘ --> 是
    ’ --> 是
    《 --> 是
    》 --> 是
    , --> 是
    。 --> 是
    ? --> 是
    、 -->===========> 测试字符串:不要啊
    正则判断结果:true -- false
    Unicode判断结果 :true
    详细判断列表:
    不 --> 是
    要 --> 是
    啊 -->===========> 测试字符串:やめて
    正则判断结果:false -- false
    Unicode判断结果 :false
    详细判断列表:
    や --> 否
    め --> 否
    て -->===========> 测试字符串:韩佳人
    正则判断结果:true -- false
    Unicode判断结果 :true
    详细判断列表:
    韩 --> 是
    佳 --> 是
    人 -->===========> 测试字符串:???
    正则判断结果:false -- false
    Unicode判断结果 :false
    详细判断列表:
    ? -->? -->? --> 否
  • 相关阅读:
    JAX-RS:@PathVariable @RequestParam @ModelAttribute等参数绑定注解详解
    关于重定向RedirectAttributes的用法
    数据库事务的四大特性以及事务的隔离级别
    电脑打开任务管理器出现卡顿
    IDEA: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value
    git学习命令
    python 输入 与如何查看文档 小结
    python formatters 与字符串 小结 (python 2)
    Hibernate 配置文件与实体类
    python编码问题 与 代码换行问题
  • 原文地址:https://www.cnblogs.com/greamrod/p/9724865.html
Copyright © 2020-2023  润新知