Java 判断字符为中文实例代码(超管用)

 更新时间:2016年02月03日 11:33:30   投稿:mrr  
在做项目中经常会遇到有项目需求是需要判断字符为中文的一些问题,所以搜集了判断中文字符的代码片段,特此分享供大家参考

在做项目中经常会遇到有项目需求是需要判断字符为中文的一些问题,所以搜集了判断中文字符的代码片段,特此分享供大家参考。

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

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
}
/**
* 是否包含中文字符<br>
* 包含中文标点符号<br>
* 
* @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;
}
/**
* 是否全是中文字符<br>
* 包含中文标点符号<br>
* 
* @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;
}
/**
* 是否是中文字符<br>
* 包含中文标点符号<br>
* 
* @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;
}
/**
* 是否包含汉字<br>
* 根据汉字编码范围进行判断<br>
* CJK统一汉字(不包含中文的,。《》()“‘'”、!¥等符号)<br>
* 
* @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();
}
/**
* 是否全是汉字<br>
* 根据汉字编码范围进行判断<br>
* CJK统一汉字(不包含中文的,。《》()“‘'”、!¥等符号)<br>
* 
* @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();
}
/**
* 是否包含汉字<br>
* 根据汉字编码范围进行判断<br>
* CJK统一汉字(不包含中文的,。《》()“‘'”、!¥等符号)<br>
* 
* @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;
}
/**
* 是否全是汉字<br>
* 根据汉字编码范围进行判断<br>
* CJK统一汉字(不包含中文的,。《》()“‘'”、!¥等符号)<br>
* 
* @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;
}
}

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

以上代码内容给大家介绍了Java 判断字符为中文实例代码(超管用),希望对大家有所帮助。

相关文章

  • JVM入门之JVM内存结构内容详解

    JVM入门之JVM内存结构内容详解

    这篇文章主要介绍了JVM入门之JVM内存结构内容详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • Java基于socket实现的客户端和服务端通信功能完整实例

    Java基于socket实现的客户端和服务端通信功能完整实例

    这篇文章主要介绍了Java基于socket实现的客户端和服务端通信功能,结合完整实例形式分析了Java使用socket建立客户端与服务器端连接与通信功能,需要的朋友可以参考下
    2018-05-05
  • Springboot初始化项目并完成登入注册的全过程

    Springboot初始化项目并完成登入注册的全过程

    工作之余,想要学习一下SpringBoot,通过网络大量教程最终成功运行SpringBoot项目,下面这篇文章主要给大家介绍了关于Springboot初始化项目并完成登入注册的相关资料,需要的朋友可以参考下
    2022-10-10
  • Spring MVC温故而知新系列教程之从零开始

    Spring MVC温故而知新系列教程之从零开始

    Spring MVC 框架在 Java 的 Web 项目中应该是无人不知的吧,你不会搭建一个 Spring 框架?作为身为一个刚刚学习Java的我都会,如果你不会的话,那可真令人忧伤。下面这篇文章主要给大家介绍了关于Spring MVC从零开始的相关资料,需要的朋友可以参考下
    2018-05-05
  • 学习在一台新电脑上配置JAVA开发环境

    学习在一台新电脑上配置JAVA开发环境

    本文主要介绍了如何在一台新电脑上配置JAVA开发环境,每一个步骤都有对应的截图和文字说明,需要的朋友可以参考下
    2015-07-07
  • java 异常的实例详解

    java 异常的实例详解

    这篇文章主要介绍了java 异常的实例详解的相关资料,希望通过本文大家能彻底掌握java异常的使用方法,需要的朋友可以参考下
    2017-09-09
  • 解决HttpPost+json请求---服务器中文乱码及其他问题

    解决HttpPost+json请求---服务器中文乱码及其他问题

    这篇文章主要介绍了解决HttpPost+json请求---服务器中文乱码及其他问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Elasticsearch QueryBuilder简单查询实现解析

    Elasticsearch QueryBuilder简单查询实现解析

    这篇文章主要介绍了Elasticsearch QueryBuilder简单查询实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 使用@Value注解从配置文件中读取数组

    使用@Value注解从配置文件中读取数组

    这篇文章主要介绍了使用@Value注解从配置文件中读取数组的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java多线程用法的实例详解

    Java多线程用法的实例详解

    这篇文章主要介绍了Java多线程用法的实例详解的相关资料,希望通过本文大家能够理解掌握这部分内容,需要的朋友可以参考下
    2017-09-09

最新评论