Java检查字符串是否包含中⽂字符
【前⾔】
最近项⽬的短信服务对接外国的第三⽅发短信通道,第三⽅对短信内容有限制,不能含中⽂字符(如果含调⽤结果肯定失败),所以在发送之前需要对短信内容做校验,看是否含有中⽂,如果含有则直接将短信发送状态改为失败,不⽤再去调⽤第三⽅;
【探索之旅】
站在巨⼈的肩膀上,⽴马在⽹上搜索⼀下关于Java怎么判断字符串中是否含有中⽂;果然⽹上有很多实现;
⼀、实现⽅式⼀
1、针对每个字符判断
1public static boolean isChinese(String str) throws UnsupportedEncodingException
2    {
3int len = str.length();
4for(int i = 0;i < len;i ++)
5        {
6            String temp = de(str.charAt(i) + "", "utf-8");
7if(temp.equals(str.charAt(i) + ""))
8continue;
9            String[] codes = temp.split("%");
10//判断是中⽂还是字符(下⾯判断不精确,部分字符没有包括)
11for(String code:codes)
12            {
13if(codepareTo("40") > 0)
14return true;
15            }
16        }
17return false;
18    }
2、优缺点:
a.缺点:效率低【每次都需要循环检测字符串中每个字符】(每次发送都需要检测短信内容,每条内容有很多字符);
b.优点:不仅能检测出中⽂汉字还能检测中中⽂标点;
⼆、实现⽅式⼆
1、利⽤正则表达式:
1public static boolean isContainChinese(String str) {
2
3        Pattern p = Patternpile("[\u4e00-\u9fa5]");
4        Matcher m = p.matcher(str);
5if (m.find()) {
6return true;
7        }
8return false;
9    }
2、优缺点:
a.缺点:只能检测出中⽂汉字不能检测中⽂标点;
b.优点:利⽤正则效率⾼;
三、⽅式三
1、改造正则
1/**
2    * 字符串是否包含中⽂
3    *
4    * @param str 待校验字符串
5    * @return true 包含中⽂字符 false 不包含中⽂字符
6    * @throws EmptyException
7*/
8public static boolean isContainChinese(String str) throws EmptyException {
9
10if (StringUtils.isEmpty(str)) {
11throw new EmptyException("sms context is empty!");
12        }
13        Pattern p = Patternpile("[\u4E00-\u9FA5|\\!|\\,|\\。|\\(|\\)|\\《|\\》|\\“|\\”|\\?|\\:|\\;|\\【|\\】]");
14        Matcher m = p.matcher(str);
15if (m.find()) {
16return true;
17        }
18return false;
19    }
2、优缺点:
a.优点:效率既⾼⼜能检测出中⽂汉字和中⽂标点;
java做什么的b.缺点:⽬前尚未发现。
【总结】
1、站在巨⼈的肩膀上,多去查,多做⽐较;
2、针对程序不断的优化,⽐如第⼀种⽅式循环读字符串量⼤后很容易将服务器CPU搞崩。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。