强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan

前言

最近项目的短信服务对接外国的第三方发短信通道,第三方对短信内容有限制,不能含中文字符(如果含调用结果肯定失败),所以在发送之前需要对短信内容做校验,看是否含有中文,如果含有则直接将短信发送状态改为失败,不用再去调用第三方;

探索之旅

站在巨人的肩膀上, 立马在网上搜索一下关于Java怎么判断字符串中是否含有中文;果然网上有很多实现;

一、最简单的方式

字符与字节的长度

依据:一个中文占两个字节,一个英文占一个字节。故若是字符长度与字节长度相等,则判断为英文。否则为中文。

public static boolean isEnglish(String p) {byte[] bytes = p.getBytes();int i = bytes.length;//i为字节长度int j = p.length();//j为字符长度return i == j;
}

二、实现方式1

针对每个字符判断

public static boolean isChinese(String str) throws UnsupportedEncodingException {int len = str.length();for(int i = 0; i < len; i ++) {String temp = URLEncoder.encode(str.charAt(i) + "", "utf-8");if(temp.equals(str.charAt(i) + ""))continue;String[] codes = temp.split("%");//判断是中文还是字符(下面判断不精确,部分字符没有包括)for(String code : codes) {if(code.compareTo("40") > 0)return true;}}return false;
}

缺点:效率低【每次都需要循环检测字符串中每个字符】(每次发送都需要检测短信内容,每条内容有很多字符);

优点:不仅能检测出中文汉字还能检测中中文标点;

二、实现方式2

利用正则表达式

public static boolean isContainChinese(String str) {Pattern p = Pattern.compile("[\u4e00-\u9fa5]");Matcher m = p.matcher(str);return m.find();
}

缺点:只能检测出中文汉字不能检测中文标点;

优点:利用正则效率高;

三、实现方式3

改造正则

/*** 字符串是否包含中文** @param str 待校验字符串* @return true 包含中文字符 false 不包含中文字符* @throws EmptyException*/
public static boolean isContainChinese(String str) throws EmptyException {if (StringUtils.isEmpty(str)) {throw new EmptyException("sms context is empty!");}Pattern p = Pattern.compile("[\u4E00-\u9FA5|\\!|\\,|\\。|\\(|\\)|\\《|\\》|\\“|\\”|\\?|\\:|\\;|\\【|\\】]");Matcher m = p.matcher(str);return m.find();
}

优点:效率既高又能检测出中文汉字和中文标点;

缺点:目前尚未发现。

总结

  1. 站在巨人的肩膀上,多去查,多做比较;
  2. 针对程序不断的优化,比如第一种方式循环读字符串量大后很容易将服务器CPU搞崩。

Java判断字符串是中文还是英文相关推荐

  1. 判断字符串是中文或者英文

    import java.util.regex.Matcher; import java.util.regex.Pattern;/*** * <p>* ClassName ShowChine ...

  2. java判断字符串有中文_JAVA入门之正则表达式判断字符串包含中文

    测试程序运行结果!可以看到,程序可以正确判断出用户输入的信息字符串是否包含中文! 整个程序代码如下: import java.io.BufferedReader; import java.io.IOE ...

  3. java判断字符串是中文乱码_java 检测字符串中文乱码

    1.检测是否为乱码 public static booleanisMessyCode(String strName) { Pattern p= Pattern.compile("\\s*|\ ...

  4. java 判断是否包含中文_java判断字符串中是否包含中文并过滤中文

    java判断字符串中是否包含中文并过滤掉中文,具体内容如下 1.判断字符串中是否包含中文方法封装 /** * 判断字符串中是否包含中文 * @param str * 待校验字符串 * @return ...

  5. java 字符串 数字个数_JAVA 统计字符串中中文,英文,数字,空格的个数

    packagecom.example.test;public classCountCharacter {/**中文字符*/ private int chCharacter = 0;/**英文字符*/ ...

  6. Java判断字符串包含英文

    /** 判断字符串中是否含有英文,包含返回true*/ private boolean isENChar(String string) {boolean flag = false;Pattern p ...

  7. Java判断字符串中是否包含中英文标点符号

    Java判断字符串中是否包含中英文标点符号 /*** 该函数判断一个字符串是否包含标点符号(中文英文标点符号).* 原理是原字符串做一次清洗,清洗掉所有标点符号.* 此时,如果原字符串包含标点符号,那 ...

  8. java 包含汉字,【转载】Java判断字符串中是不是包含汉字

    [转载]Java判断字符串中是否包含汉字 import java.util.regex.Matcher; import java.util.regex.Pattern; public class If ...

  9. java 包含汉字,java判断字符串中是否包含汉字

    java判断字符串中是否包含汉字 package com.zuidaima.util; /** [email protected] www.zuidaima.com **/ public class ...

最新文章

  1. 如何让自己的收件箱只收到自己订阅的邮件服务商
  2. 国内第一本micropython的书出版《机器人Python极客编程入门与实战》
  3. ReadFile 和 补充CreateFile
  4. Python使用aiohttp异步爬取糗事百科
  5. jeesite缓存问题
  6. Dockerfile构建docker镜像注意事项
  7. 调用Android自带日历功能(日历列表单、添加一个日历事件)
  8. jQuery页面滚动 动态加载图片等元素
  9. 设计模式(三)模版方法(行为型)
  10. DOM 中的事件处理
  11. Atitit.收银机小票打印功能的设计  java php c#.net版本
  12. Android 开发工具一键下载
  13. Android篮球计分器论文,单片机课程设计报告 篮球计时计分器
  14. 湘潭大学c语言大作业难过吗,C语言程序设计参考答案(湘大出版社)
  15. 双线macd指标参数最佳设置_经典实用的双线MACD指标
  16. 手机断触怎么办_手机屏幕断触怎么办?弹片微针模组解决手机屏幕测试难题
  17. JS toFixed(2) 返回 -0.00
  18. 数据结构(java版)SortedSeqList(排序顺序表)
  19. 计算机打印机共享无法连接不上,电脑共享打印机连接不上怎么办? 爱问知识人...
  20. 【JavaScript】浏览器

热门文章

  1. 计算机类学术论文一般结构及投稿相关知识
  2. Warning: <twoCpt /> is using incorrect casing. Use PascalCase for React components, or lowercase for
  3. 计算机电源可以带上飞机吗,移动电源能带上飞机吗
  4. 黄金现货行情反复怎么办?
  5. 网易闪电邮企业邮箱设置教程(POP3)
  6. 关于看涨期权和看跌期权的理解
  7. BZOJ 1499 [NOI2005]瑰丽华尔兹 动态规划(+单调队列)
  8. 开源进展|区块链跨链协作平台WeCross v1.1.0发布
  9. 微星h61m主板jsp1接线图_微星主板jspi1怎么接,jspi1怎么接线
  10. jvm垃圾回收是什么时候触发的? 垃圾回收算法? 都有哪些垃圾回收器