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小时内删除。
发表评论