Java完美判断中文字符的方法
2023-06-13 09:14:46 时间
Java判断一个字符串是否有中文一般情况是利用Unicode编码(CJK统一汉字的编码区间:0x4e00?0x9fbb)的正则来做判断,但是其实这个区间来判断中文不是非常精确,因为有些中文的标点符号比如:,。等等是不能识别的。
以下是比较完善的判断方法:CharUtil.java
importjava.util.regex.Pattern;
publicclassCharUtil{
publicstaticvoidmain(String[]args){
String[]strArr=newString[]{"www.micmiu.com","!@#$%^&*()_+{}[]|\""?/:;<>,.","!¥……()——:;“”‘"《》,。?、","不要啊","やめて","韩佳人","???"};
for(Stringstr: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(inti=0;i<ch.length;i++){
charc=ch[i];
System.out.println(c+"-->"+(isChinese(c)?"是":"否"));
}
}
}
//根据Unicode编码完美的判断中文汉字和符号
privatestaticbooleanisChinese(charc){
Character.UnicodeBlockub=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){
returntrue;
}
returnfalse;
}
//完整的判断中文汉字和符号
publicstaticbooleanisChinese(StringstrName){
char[]ch=strName.toCharArray();
for(inti=0;i<ch.length;i++){
charc=ch[i];
if(isChinese(c)){
returntrue;
}
}
returnfalse;
}
//只能判断部分CJK字符(CJK统一汉字)
publicstaticbooleanisChineseByREG(Stringstr){
if(str==null){
returnfalse;
}
Patternpattern=Pattern.compile("[\\u4E00-\\u9FBF]+");
returnpattern.matcher(str.trim()).find();
}
//只能判断部分CJK字符(CJK统一汉字)
publicstaticbooleanisChineseByName(Stringstr){
if(str==null){
returnfalse;
}
//大小写不同:\\p表示包含,\\P表示不包含
//\\p{Cn}的意思为Unicode中未被定义字符的编码,\\P{Cn}就表示Unicode中已经被定义字符的编码
Stringreg="\\p{InCJKUnifiedIdeographs}&&\\P{Cn}";
Patternpattern=Pattern.compile(reg);
returnpattern.matcher(str.trim()).find();
}
}
相关文章
- Java 中的 int 型转为 long 型
- java图书馆新地址_值得你关注的16个顶级 Java 开源项目!小白必看
- java出现中文乱码_Java开发中中文乱码总结
- java.util.scanner sc_Java的Scanner sc=new Scanner(System.in)是什么意思「建议收藏」
- java jersey使用总结_Java Jersey2使用总结
- 用java实现笛卡尔积_Java实现笛卡尔积
- java常量池在方法区还是堆_JAVA常量池
- Java版五子棋小游戏(java控制台)
- Java转换流_java中的字符使用什么编码
- java字符串转换为json对象6_Json对象与Json字符串的转化、JSON字符串与Java对象的转换…
- java查找字符的方法_Java字符串查找(3种方法)
- 面试必问:说一下 Java 虚拟机的内存布局?
- 【Android Gradle 插件】gradle.properties 中配置编译参数并在 Java 代码 BuildConfig 中调用该参数
- Python 人气王,JS 比 Java 更受公司青睐详解编程语言
- Java Activiti6.0 spring5 SSM 工作流引擎 审批流程 java项目框架详解编程语言
- Java开发者必知:开发中常见的危险信号详解编程语言
- 实现使用Java代码实现MySQL数据库连接(java连接mysql数据库代码)
- Java数据持久层框架 MyBatis之API学习九(SQL语句构建器详解)编程语言
- MySQL数据库开发实践:用 Java 开发中文应用(mysql中文java)
- Java程序构建基于Redis的缓存系统(java用redis)
- 策略利用Java实现Redis过期策略(redisjava过期)
- 构建Java应用程序中Redis集群的方法(java连redis集群)
- Linux下快速配置Java环境变量(linux设置java环境变量)
- 秘籍学习实现纯Java版Redis(纯java版redis)
- Java程序构建Oracle数据库直连(java直连oracle)
- Java判断字符串中是否包含中文方法