转自:https://blog.csdn.net/zhanghan18333611647/article/details/80038629

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

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

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

一、实现方式一

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、优缺点:

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

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

二、实现方式二   

1、利用正则表达式:

     public static boolean isContainChinese(String str) {

         Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
Matcher m = p.matcher(str);
if (m.find()) {
return true;
}
return false;
}

2、优缺点:

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

b.优点:利用正则效率高;

三、方式三

1、改造正则

      /**
* 字符串是否包含中文
*
* @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);
if (m.find()) {
return true;
}
return false;
}

2、优缺点:

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

b.缺点:目前尚未发现。

【总结】
        1、站在巨人的肩膀上,多去查,多做比较;

2、针对程序不断的优化,比如第一种方式循环读字符串量大后很容易将服务器CPU搞崩。

Java检查字符串是否包含中文字符的更多相关文章

  1. java 验证字符串是否包含中文字符

    中文的模式:"[\\u4e00-\\u9fa5]|\\\\u" 例子: private static final Pattern p = Pattern.compile(" ...

  2. 使用Java判断字符串中的中文字符数量

    Java判断一个字符串str中中文的个数,经过总结,有以下几种方法(全部经过验证),可根据其原理判断在何种情况下使用哪个方法: 1. char[] c = str.toCharArray(); for ...

  3. Java 判断字符串是否包含某个字符

    // 判断不为静态栏目的文章 if (e.getCategory().getName().indexOf("静态") == -1) { articleList2.add(e); } ...

  4. java算法面试题:有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数 按值的降序排序,如果值相同则按键值的字母顺序

    package com.swift; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; publi ...

  5. python删除所有的中文字符、非ASCII或非英文字符,检查字符串是否包含非ASCII

    Your ''.join() expression is filtering, removing anything non-ASCII; you could use a conditional exp ...

  6. Java:判断字符串中包含某字符的个数

    Java:判断字符串中包含某字符的个数 JAVA中查询一个词在内容中出现的次数: public int getCount(String str,String key){ if(str == null ...

  7. Python 判断字符串是否包含中文

    一.摘要 使用 xlrd 模块打开带中文的excel文件时,会报错. FileNotFoundError: [Errno 2] No such file or directory: 'xx.xlsx' ...

  8. SQL判断某列中是否包含中文字符、英文字符、纯数字 (转)

    一.包含中文字符 select * from 表名 where 列名 like '%[吖-座]%' 二.包含英文字符 select * from 表名 where 列名 like '%[a-z]%' ...

  9. mysql 检查字符串是否包含子串

    1.使用substring_index(src,target,index) 从src的开头查找第index个target.返回的substring为从src的开头到第num个target这段字符串.比 ...

随机推荐

  1. Spring Boot 各版本的Java版本要求

    Spring Boot 各版本的Java版本要求 Spring Boot 与 Java 对应版本,以下表格由官方网站总结. 官网:https://spring.io/projects/spring-b ...

  2. JAVA JDK安装及path环境变量配置

    JDK安装 JVM  :JAVA虚拟机 JRE :java运行环境=JVM+核心类库 JDK :JAVA开发工具包=JRE+java开发工具 java开发工具:编译工具(javac.exe) . 运行 ...

  3. HTTP、HTTP2.0、SPDY、HTTPS 你应该知道的一些事

    参考: https://www.cnblogs.com/wujiaolong/p/5172e1f7e9924644172b64cb2c41fc58.html

  4. Linux系统查看是32位还是64位

    uname -a 如果是64位机器,会输出x86_64

  5. JavaScript如何实现日期的前一天后一天转变

    1.生成时间 var data =new Date(); 2.获得时间戳     什么是时间戳? 时间戳是指格林威治时间自1970年1月1日(00:00:00 GTM)至当前时间的总秒数.它也被称为U ...

  6. docker 学习操作记录 5

    记录5 * Overheard at KubeCon: "microk8s.status just blew my mind". https://microk8s.io/docs/ ...

  7. ASP.NET-------gridview 进行编辑的时候,给出提示

    在使用gridview 控件的时候,控制修改人的操作行为,并给出合理的提示, 比如 在执行编辑操作的时候  不允许姓名为空,并显示出提示,姓名不可以为空 操作: 前台页面,对一些字段的解释 一定要注意 ...

  8. 从有序矩阵M x N中找出是否包含某一个数,要求时间复杂度为O(M+N)

    有序指的是每行从左到右依次变大,每列从上到下依次变大 思路: 从右上顶点开始依次判断当前值与给定值的大小,往左下顶点移动,结束条件是下标超过范围 public class FindNumInOrder ...

  9. OpenCV 静态库 CMAKE 文件

    cmake_minimum_required(VERSION 3.12)project(computer_cv) set(CMAKE_CXX_STANDARD 11) find_package(Ope ...

  10. Feign实现自定义错误处理

    关键操作 实现ErrorDecoder接口 问题和背景 最近项目中在大量使用Feign和OkHttp作为http客户端使用,开发效率得到显著的提升.但也面临一些问题,比如每个下游系统的异常返回方式不同 ...