Java判断一个字符串是否有中文一般情况是利用Unicode编码(CJK统一汉字的编码区间:0x4e00–0x9fbb)的正则来做判断,但是其实这个区间来判断中文不是非常精确,因为有些中文的标点符号比如:,。等等是不能识别的。
以下是比较完善的判断方法:CharUtil.java
package com.micmiu.utils; import java.util.regex.Pattern; /** * 字符通用工具类 * * @author <a href="http://www.micmiu.com">Michael Sun</a> */ public class CharUtil { /** * @param args */ 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 详细判断列表: 한 --> 否 가 --> 否 인 --> 否 转自:http://www.micmiu.com/lang/java/java-check-chinese/ http://lwjlaser.iteye.com/blog/963211
相关推荐
Java判断一个字符串是否有中文一般情况是利用Unicode编码正则来做判断,但是其实这个区间来判断中文不是非常精确,以下是比较完善的判断方法
* 根据Unicode编码完美的判断中文汉字和符号 * @param c 要判断的 字符 * @return boolean */ private static boolean isChinese(char c) { Character.UnicodeBlock ub = Character.UnicodeBlock.of(c); ...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字 Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,...
Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字 Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,...
* 就需要通过一个判断,如果这个字符不存在,就将key以及对于value存入. * (如果已经存在,说明这个字符遍历的已经不是最大的value值了) * 4.当这个map集合把元素都存入之后,再通过EntrySet()将这个关系对遍历...
APK程序在处理字符串资源时会先判断语言环境,然后自己调用对应语言的。可是,有的程序员会自觉不自觉地,将部分文字内容写到程序代码里面,因此就出现了在资源文件中找不到的词条了。 对这部分词条的修改,相对就...
从而判断我们的网站优化是否成功,这也是站长们想看到的最终结果。 第二:定位对手网站。自身的网站分析完后,并可定出网站的主关键词,主关键词定好后,就是要通过这个关键词找到网站的对手,在搜索引擎输入相应...
第二种方法用一个额外变量len避免了每次条件判断都要重复执行函数strlen(s),而执行该函数是非常耗时的(假设字符串的长度为n,函数执行的复杂度为O(n)),尤其是当for循环体的语句比较少,字符串比较长的时候。...
Java:使⽤范围最⼴的编程语⾔,有很多社区进⾏交流,进⾏编程实现具有灵活⾼效的特点,不⾜之处就是实现功能的代码量较⼤(相对于 其他数据挖掘编程语⾔)。 Scala: ⼀种具有⾯向对象风格、函数式风格、更⾼层的...
书中的算法以英语加伪代码的形式给出,只要有一点程序设计经验的人都能读懂,并可以用任何计算机语言(如C/C++和Java等)方便地实现。在书中,作者将算法的讨论集中在一些比较现代的例子上,它们来自分子生物学(如...
书中的算法以英语加伪代码的形式给出,只要有一点程序设计经验的人都能读懂,并可以用任何计算机语言(如C/C++和Java等)方便地实现。在书中,作者将算法的讨论集中在一些比较现代的例子上,它们来自分子生物学(如...
如何判断ArrayList,Hashtable,SortedList 这类对象是否相等 帮助解决网页和JS文件中的中文编码问题的小工具 慎用const关键字 装箱,拆箱以及反射 动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/...
面向对象的思想方法已经非常流行了,在编程语言(例如java,js)中,都运用面向对象的编程思想。在XML中,就是要将网页也作为一个对象来操作和控制,我们可以建立自己的对象和模板。与对象进行交流,如何命令对象,...