转自:http://blog.icoolxue.com/java-to-determine-whether-a-string-is-garbled-pro-testing-available/
经过几天的努力,终于给爱酷学习网(http://www.icoolxue.com)加上了搜索引擎的支持,现在你可以搜索自己喜欢的视频教程啦。
PS:爱酷学习网是一个全面的视频教程网站,有各类计算机类视频如Java/C/C++/Android/Hiberante等等。
而由此也带来了一个问题,在用户输入查询字符串之后,虽然我已经想尽一切办法解决了乱码问题,但是真正在线上的时候,还是遇到了乱码,百思而不得其解:
可以看到,乱码问题一直存在,于是我在想,如果能判断搜索字符串如果是乱码的话,就不将该条搜索进行处理(意思就是说只搜索,而不将该字符串存放到数据库中),好吧,代码如下:
/** * 判断字符是否是中文 * * @param c 字符 * @return 是否是中文 */ public
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.GENERAL_PUNCTUATION || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) { return
true ; } return
false ; } /** * 判断字符串是否是乱码 * * @param strName 字符串 * @return 是否是乱码 */ public
static boolean
isMessyCode(String strName) { Pattern p = Pattern.compile( "\\s*|\t*|\r*|\n*" ); Matcher m = p.matcher(strName); String after = m.replaceAll( "" ); String temp = after.replaceAll( "\\p{P}" ,
"" ); char [] ch = temp.trim().toCharArray(); float
chLength = ch.length; float
count = 0 ; for
( int
i = 0 ; i < ch.length; i++) { char
c = ch[i]; if
(!Character.isLetterOrDigit(c)) { if
(!isChinese(c)) { count = count +
1 ; } } } float
result = count / chLength; if
(result > 0.4 ) { return
true ; }
else { return
false ; } } public
static void main(String[] args) { System.out.println(isMessyCode( "韩顺平" )); System.out.println(isMessyCode( "你好" )); } |
相关代码已经注释,谢谢支持。