Java判断字符串是中文还是英文
强烈推荐一个大神的人工智能的教程: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();
}
优点:效率既高又能检测出中文汉字和中文标点;
缺点:目前尚未发现。
总结
- 站在巨人的肩膀上,多去查,多做比较;
- 针对程序不断的优化,比如第一种方式循环读字符串量大后很容易将服务器CPU搞崩。
Java判断字符串是中文还是英文相关推荐
- 判断字符串是中文或者英文
import java.util.regex.Matcher; import java.util.regex.Pattern;/*** * <p>* ClassName ShowChine ...
- java判断字符串有中文_JAVA入门之正则表达式判断字符串包含中文
测试程序运行结果!可以看到,程序可以正确判断出用户输入的信息字符串是否包含中文! 整个程序代码如下: import java.io.BufferedReader; import java.io.IOE ...
- java判断字符串是中文乱码_java 检测字符串中文乱码
1.检测是否为乱码 public static booleanisMessyCode(String strName) { Pattern p= Pattern.compile("\\s*|\ ...
- java 判断是否包含中文_java判断字符串中是否包含中文并过滤中文
java判断字符串中是否包含中文并过滤掉中文,具体内容如下 1.判断字符串中是否包含中文方法封装 /** * 判断字符串中是否包含中文 * @param str * 待校验字符串 * @return ...
- java 字符串 数字个数_JAVA 统计字符串中中文,英文,数字,空格的个数
packagecom.example.test;public classCountCharacter {/**中文字符*/ private int chCharacter = 0;/**英文字符*/ ...
- Java判断字符串包含英文
/** 判断字符串中是否含有英文,包含返回true*/ private boolean isENChar(String string) {boolean flag = false;Pattern p ...
- Java判断字符串中是否包含中英文标点符号
Java判断字符串中是否包含中英文标点符号 /*** 该函数判断一个字符串是否包含标点符号(中文英文标点符号).* 原理是原字符串做一次清洗,清洗掉所有标点符号.* 此时,如果原字符串包含标点符号,那 ...
- java 包含汉字,【转载】Java判断字符串中是不是包含汉字
[转载]Java判断字符串中是否包含汉字 import java.util.regex.Matcher; import java.util.regex.Pattern; public class If ...
- java 包含汉字,java判断字符串中是否包含汉字
java判断字符串中是否包含汉字 package com.zuidaima.util; /** [email protected] www.zuidaima.com **/ public class ...
最新文章
- 如何让自己的收件箱只收到自己订阅的邮件服务商
- 国内第一本micropython的书出版《机器人Python极客编程入门与实战》
- ReadFile 和 补充CreateFile
- Python使用aiohttp异步爬取糗事百科
- jeesite缓存问题
- Dockerfile构建docker镜像注意事项
- 调用Android自带日历功能(日历列表单、添加一个日历事件)
- jQuery页面滚动 动态加载图片等元素
- 设计模式(三)模版方法(行为型)
- DOM 中的事件处理
- Atitit.收银机小票打印功能的设计 java php c#.net版本
- Android 开发工具一键下载
- Android篮球计分器论文,单片机课程设计报告 篮球计时计分器
- 湘潭大学c语言大作业难过吗,C语言程序设计参考答案(湘大出版社)
- 双线macd指标参数最佳设置_经典实用的双线MACD指标
- 手机断触怎么办_手机屏幕断触怎么办?弹片微针模组解决手机屏幕测试难题
- JS toFixed(2) 返回 -0.00
- 数据结构(java版)SortedSeqList(排序顺序表)
- 计算机打印机共享无法连接不上,电脑共享打印机连接不上怎么办? 爱问知识人...
- 【JavaScript】浏览器
热门文章
- 计算机类学术论文一般结构及投稿相关知识
- Warning: <twoCpt /> is using incorrect casing. Use PascalCase for React components, or lowercase for
- 计算机电源可以带上飞机吗,移动电源能带上飞机吗
- 黄金现货行情反复怎么办?
- 网易闪电邮企业邮箱设置教程(POP3)
- 关于看涨期权和看跌期权的理解
- BZOJ 1499 [NOI2005]瑰丽华尔兹 动态规划(+单调队列)
- 开源进展|区块链跨链协作平台WeCross v1.1.0发布
- 微星h61m主板jsp1接线图_微星主板jspi1怎么接,jspi1怎么接线
- jvm垃圾回收是什么时候触发的? 垃圾回收算法? 都有哪些垃圾回收器