文档章节

Java 完美判断中文字符

Skqing
 Skqing
发布于 2015/11/03 16:18
字数 493
阅读 191
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

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

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

http://www.micmiu.com/lang/java/java-check-chinese/


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

转载自:http://www.cnblogs.com/jinc/archive/2013/02/26/2933766.html

本文转载自:

Skqing

Skqing

粉丝 41
博文 206
码字总数 26375
作品 0
深圳
后端工程师
私信 提问
细说 Java 中的字符和字符串( 二 )

原文出处:BuquTianya 我们上次在《细说Java中的字符和字符串(一)》说了Java中char和中文字符之间的关系,说明了char能不能存储一个中文字符,以及如何判断Java的字符串是否包含中文字符。...

BuquTianya
2018/06/30
0
0
HttpUrlConnection流传输问题(正确传输包含中文的JSON字符串)

目前在写一个功能,主要是使用 HttpURLConnection 发送http请求调用外部接口。本来一切正常的,可是在发送post请求上传数据给服务端时,服务端返回错误信息:获取的JSON请求是乱码的。 因为请...

wishingpep
2018/08/10
0
0
Tomcat中文乱码问题的原理和解决方法

Tomcat中文乱码问题的原理和解决方法   自从接触Java和JSP以来,就不断与Java的中文乱码问题打交道,现在终于得到了彻底的解决,现将我们的解决心得与大家共享。   一、Java中文问题的由...

孙斐
2013/02/26
260
0
0020-使用JDBC向Kudu表插入中文字符-双引号的秘密

1.问题描述 使用Impala JDBC向Kudu表中插入中文字符,插入的中文字符串乱码,中文字符串被截断。 2.问题复现 测试环境: CDH5.12.0 Kudu1.4.0 ImpalaJDBC41_2.5.35 1.使用ImpalaJDBC代码进行...

Hadoop实操
2018/11/19
41
0
Java开源项目cws_evaluation:中文分词器分词效果评估

cwsevaluation 是一个Java开源项目,用于对Java中文分词器分词效果进行评估。 cwsevaluation 是通过对前文《word分词器、ansj分词器、mmseg4j分词器、ik-analyzer分词器分词效果评估》中写的...

杨尚川
2014/08/30
1K
5

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 浙江台的电话号码倒是记得挺牢

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :《Out On The Streets》 一直不理解北欧人对重金属和死亡摇滚的热情,听完这首歌好像理解了。#今日歌曲推荐# 《Out On The Stre...

小小编辑
今天
5
0
Leetcode PHP题解--D121 21. Merge Two Sorted Lists

D121 21. Merge Two Sorted Lists 题目链接 21. Merge Two Sorted Lists 题目分析 合并两个有序链表。 思路 逐个遍历两个链表,把小的数字塞入数组里。之后再拼起来。 最终代码 <?php/** *...

skys215
今天
5
0
mars-config 动态配置管理

mars-config 码云地址:https://gitee.com/fashionbrot/mars-config 介绍 spring mvc 、springboot 动态配置系统。http 轮训方式 更新 动态配置 软件架构 软件架构说明 后端使用技术 :sprin...

fashionbrot
今天
14
0
女朋友玩吃鸡手游被开挂老哥骗炮,我见义勇为将骗子绳之以法

大家好,我是乔哥。 晚上10点以后下班后我回到自如出租房里面,开始处理公众号粉丝发来的消息,一条一条处理,突然看到了这么几条消息,吸引了我的眼球: 然后我就和这位女粉丝小红(化名)聊...

gzc426
今天
9
0
两款软件

fadetop保护眼睛软件 Snipaste截图软件

伟大源于勇敢的开始
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部