资讯专栏INFORMATION COLUMN

Java 判断中文字符

Jingbin_ / 841人阅读

摘要:项目偶尔需要对中文字符做一些处理,所以搜集了这个判断中文字符的代码片段,分享给大家。等符号是否全是汉字根据汉字编码范围进行判断统一汉字不包含中文的,。等符号如果仅仅去判断是否是中文,不需判断中文标点的话,推荐使用正则去匹配,可能更高效点。

项目偶尔需要对中文字符做一些处理,所以搜集了这个判断中文字符的代码片段,分享给大家。

直接贴出代码了,里面有详细的注释。

package com.coder4j.main;

import java.util.regex.Pattern;

/**
 * Java 判断中文字符
 * 
 * @author Chinaxiang
 * @date 2015-08-11
 *
 */
public class CheckChinese {

    public static void main(String[] args) {
        // 纯英文
        String s1 = "Hello,Tom.!@#$%^&*()_+-={}|[];":"?";
        // 纯中文(不含中文标点)
        String s2 = "你好中国";
        // 纯中文(含中文标点)
        String s3 = "你好,中国。《》:“”‘’;()【】!¥、";
        // 韩文
        String s4 = "한국어난";
        // 日文
        String s5 = "ぎじゅつ";
        // 特殊字符
        String s6 = "��";
        String s7 = "╃";
        String s8 = "╂";
        // 繁体中文
        String s9 = "蒼老師";

        // 1 使用字符范围判断
        System.out.println("s1是否包含中文:" + hasChineseByRange(s1));// false
        System.out.println("s2是否包含中文:" + hasChineseByRange(s2));// true
        System.out.println("s3是否包含中文:" + hasChineseByRange(s3));// true
        System.out.println("s4是否包含中文:" + hasChineseByRange(s4));// false
        System.out.println("s5是否包含中文:" + hasChineseByRange(s5));// false
        System.out.println("s6是否包含中文:" + hasChineseByRange(s6));// false
        System.out.println("s7是否包含中文:" + hasChineseByRange(s7));// false
        System.out.println("s8是否包含中文:" + hasChineseByRange(s8));// false
        System.out.println("s9是否包含中文:" + hasChineseByRange(s9));// true
        System.out.println("-------分割线-------");
        System.out.println("s1是否全是中文:" + isChineseByRange(s1));// false
        System.out.println("s2是否全是中文:" + isChineseByRange(s2));// true
        System.out.println("s3是否全是中文:" + isChineseByRange(s3));// false 中文标点不在范围内
        System.out.println("s4是否全是中文:" + isChineseByRange(s4));// false
        System.out.println("s5是否全是中文:" + isChineseByRange(s5));// false
        System.out.println("s6是否全是中文:" + isChineseByRange(s6));// false
        System.out.println("s7是否全是中文:" + isChineseByRange(s7));// false
        System.out.println("s8是否全是中文:" + isChineseByRange(s8));// false
        System.out.println("s9是否全是中文:" + isChineseByRange(s9));// true
        System.out.println("-------分割线-------");
        // 2 使用字符范围正则判断(结果同1)
        System.out.println("s1是否包含中文:" + hasChineseByReg(s1));// false
        System.out.println("s2是否包含中文:" + hasChineseByReg(s2));// true
        System.out.println("s3是否包含中文:" + hasChineseByReg(s3));// true
        System.out.println("s4是否包含中文:" + hasChineseByReg(s4));// false
        System.out.println("s5是否包含中文:" + hasChineseByReg(s5));// false
        System.out.println("s6是否包含中文:" + hasChineseByReg(s6));// false
        System.out.println("s7是否包含中文:" + hasChineseByReg(s7));// false
        System.out.println("s8是否包含中文:" + hasChineseByReg(s8));// false
        System.out.println("s9是否包含中文:" + hasChineseByReg(s9));// true
        System.out.println("-------分割线-------");
        System.out.println("s1是否全是中文:" + isChineseByReg(s1));// false
        System.out.println("s2是否全是中文:" + isChineseByReg(s2));// true
        System.out.println("s3是否全是中文:" + isChineseByReg(s3));// false 中文标点不在范围内
        System.out.println("s4是否全是中文:" + isChineseByReg(s4));// false
        System.out.println("s5是否全是中文:" + isChineseByReg(s5));// false
        System.out.println("s6是否全是中文:" + isChineseByReg(s6));// false
        System.out.println("s7是否全是中文:" + isChineseByReg(s7));// false
        System.out.println("s8是否全是中文:" + isChineseByReg(s8));// false
        System.out.println("s9是否全是中文:" + isChineseByReg(s9));// true
        System.out.println("-------分割线-------");
        // 3 使用CJK字符集判断
        System.out.println("s1是否包含中文:" + hasChinese(s1));// false
        System.out.println("s2是否包含中文:" + hasChinese(s2));// true
        System.out.println("s3是否包含中文:" + hasChinese(s3));// true
        System.out.println("s4是否包含中文:" + hasChinese(s4));// false
        System.out.println("s5是否包含中文:" + hasChinese(s5));// false
        System.out.println("s6是否包含中文:" + hasChinese(s6));// false
        System.out.println("s7是否包含中文:" + hasChinese(s7));// false
        System.out.println("s8是否包含中文:" + hasChinese(s8));// false
        System.out.println("s9是否包含中文:" + hasChinese(s9));// true
        System.out.println("-------分割线-------");
        System.out.println("s1是否全是中文:" + isChinese(s1));// false
        System.out.println("s2是否全是中文:" + isChinese(s2));// true
        System.out.println("s3是否全是中文:" + isChinese(s3));// true 中文标点也被包含进来
        System.out.println("s4是否全是中文:" + isChinese(s4));// false
        System.out.println("s5是否全是中文:" + isChinese(s5));// false
        System.out.println("s6是否全是中文:" + isChinese(s6));// false
        System.out.println("s7是否全是中文:" + isChinese(s7));// false
        System.out.println("s8是否全是中文:" + isChinese(s8));// false
        System.out.println("s9是否全是中文:" + isChinese(s9));// true

    }

    /**
     * 是否包含中文字符
* 包含中文标点符号
* * @param str * @return */ public static boolean hasChinese(String str) { if (str == null) { return false; } char[] ch = str.toCharArray(); for (char c : ch) { if (isChinese(c)) { return true; } } return false; } /** * 是否全是中文字符
* 包含中文标点符号
* * @param str * @return */ public static boolean isChinese(String str) { if (str == null) { return false; } char[] ch = str.toCharArray(); for (char c : ch) { if (!isChinese(c)) { return false; } } return true; } /** * 是否是中文字符
* 包含中文标点符号
* * @param c * @return */ private static boolean isChinese(char c) { Character.UnicodeBlock ub = Character.UnicodeBlock.of(c); if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS) { return true; } else if (ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS) { return true; } else if (ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION) { return true; } else if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A) { return true; } else if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B) { return true; } else if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C) { return true; } else if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D) { return true; } else if (ub == Character.UnicodeBlock.GENERAL_PUNCTUATION) { return true; } else if (ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) { return true; } return false; } /** * 是否包含汉字
* 根据汉字编码范围进行判断
* CJK统一汉字(不包含中文的,。《》()“‘’”、!¥等符号)
* * @param str * @return */ public static boolean hasChineseByReg(String str) { if (str == null) { return false; } Pattern pattern = Pattern.compile("[u4E00-u9FBF]+"); return pattern.matcher(str).find(); } /** * 是否全是汉字
* 根据汉字编码范围进行判断
* CJK统一汉字(不包含中文的,。《》()“‘’”、!¥等符号)
* * @param str * @return */ public static boolean isChineseByReg(String str) { if (str == null) { return false; } Pattern pattern = Pattern.compile("[u4E00-u9FBF]+"); return pattern.matcher(str).matches(); } /** * 是否包含汉字
* 根据汉字编码范围进行判断
* CJK统一汉字(不包含中文的,。《》()“‘’”、!¥等符号)
* * @param str * @return */ public static boolean hasChineseByRange(String str) { if (str == null) { return false; } char[] ch = str.toCharArray(); for (char c : ch) { if (c >= 0x4E00 && c <= 0x9FBF) { return true; } } return false; } /** * 是否全是汉字
* 根据汉字编码范围进行判断
* CJK统一汉字(不包含中文的,。《》()“‘’”、!¥等符号)
* * @param str * @return */ public static boolean isChineseByRange(String str) { if (str == null) { return false; } char[] ch = str.toCharArray(); for (char c : ch) { if (c < 0x4E00 || c > 0x9FBF) { return false; } } return true; } }

如果仅仅去判断是否是中文,不需判断中文标点的话,推荐使用正则去匹配,可能更高效点。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65430.html

相关文章

  • 【面试】Java基础的那些事-Thr

    摘要:为了提高程序运行的效率,在软件发布后,检查默认是被关闭的。注意不能保证原子性,不能代替,且其会阻止编译器对代码的优化。以下方法用来判断一个字符串中是否包含中文字符。 前言 面试中对于技术职位,一般分笔试与面谈,如果面试官的一些小问题你可以立马找到对应的知识点扩展开来,那么这就是你的优势,本系列将讲述一些java面试中的事,不会很详细,但是应该比较全面吧。 主要内容 assert有什么作...

    ShowerSun 评论0 收藏0
  • Java 输入/输出 I/O流 RandomAccessFile

    摘要:当使用节点流进行输入输出时,程序直接连接到实际的数据源,和时间的输入输出节点连接处理流则用于对一个已存在的流进行连接或封装,通过封装后的流来实现数据读写功能,处理流也被称为高级流。 文件的编码 文本文件就是字节序列,可以是任意编码形式。在中文操作系统上直接创建文本文件,则该文本文件只能识别ANSI编码,其他编码方式会产生乱码 package imooc.io; import java...

    Eirunye 评论0 收藏0
  • java实现浏览器下载文件,并解决兼容各浏览器的文件下载中文乱码

    摘要:浏览器下载代码如下通过循环将读入的文件的内容输出到浏览器中如果文件名为中文,上面的代码下载的文件名会乱码。解决中文乱码方法拿到浏览器请求的判断是否包含,是则直接讲文件名转换为,否则使用转换。 场景描述: 由于项目需求,需要支持浏览器下载文件,比如招聘网站的在线简历下载。 浏览器下载代码如下: public static void downloadFile(File file,...

    tunny 评论0 收藏0
  • Java编程基础21——IO(字节流)

    摘要:流按操作类型分为两种字节流字节流可以操作任何数据因为在计算机中任何数据都是以字节的形式存储的字符流字符流只能操作纯字符数据,比较方便。 1_IO流概述及其分类 1.概念 IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的类都在IO包中 流按流向分为两种:输入流,输出流。 流按操作类型分为两种: 字节流 : 字节流可以操作任何数据,因为在...

    yanbingyun1990 评论0 收藏0
  • java学习笔记 - 标识符和关键字

    摘要:标识符和关键字标识符可以用来表示文件名,变量名,类名,接口名和成员方法等。字符集是字符集,该字符集一个字符占两个字节。标示符就是由字母和数字组成的,除了关键字之外的字符序列。 标识符和关键字 标识符可以用来表示文件名,变量名,类名,接口名和成员方法等。关键字是Java语言中保留的一些英文单词,具有特殊的含义。 java字符集是Unicode字符集,该字符集一个字符占两个字节。 java...

    qianfeng 评论0 收藏0

发表评论

0条评论

Jingbin_

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<