Java判断一个字符串是否有中文是利用Unicode编码来判断,因为中文的编码区间为:0x4e00--0x9fbb,不过通用区间来判断中文也不非常精确,因为有些中文的标点符号利用区间判断会得到错误的结果。而且利用区间判断中文效率也并不高,例如;str.substring(i, i + 1).matches("[\\u4e00-\\u9fbb]+"),就需要遍历整个字符串,如果字符串太长效率非常低,而且判断标点还会错误。
我再网上看到的这个代码,感觉效率挺高的.你可以试试看……- package com.zakisoft.ch;
-
- public class IsChineseOrNot {
-
- // GENERAL_PUNCTUATION 判断中文的“号
- // CJK_SYMBOLS_AND_PUNCTUATION 判断中文的。号
- // HALFWIDTH_AND_FULLWIDTH_FORMS 判断中文的,号
- private static final 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.GENERAL_PUNCTUATION
- || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
- || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
- return true;
- }
- return false;
- }
-
- public static final 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;
- }
-
- public static void main(String[] args) {
- System.out.println(isChinese("き"));
- System.out.println(isChinese("test,.?!%^&*(){}[]"));
- System.out.println(isChinese("测试"));
- System.out.println(isChinese("“测试”,。?!%……&*()——{}【】”"));
- }
-
- public static final boolean isChineseCharacter(String chineseStr) {
- char[] charArray = chineseStr.toCharArray();
- for (int i = 0; i < charArray.length; i++) {
- if ((charArray[i] >= 0x4e00) && (charArray[i] <= 0x9fbb)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * @deprecated; 弃用。和方法isChineseCharacter比效率太低。
- * */
- public static final boolean isChineseCharacter_f2() {
- String str = "!?";
- for (int i = 0; i < str.length(); i++) {
- if (str.substring(i, i + 1).matches("[\\u4e00-\\u9fbb]+")) {
- return true;
- }
- }
- return false;
- }
- }
复制代码 我运行了一下,可以判断是否为字符,你试试能不能用! |