在项目开发中经常碰到到输入字符的校验,特别是中英文混合在一起的校验。而为了满足校验的需求,有时需要计算出中英文的长度。

本文将通过几种常用的方法实现长度的计算:

public class StringLengthTest {

private static long startTime;

public static void main(String[] args) {

String validateStr = "中英文校验abcde接口ii";

for (int i = 0; i < 10; i++) {

validateStr = validateStr + validateStr;

}

int bytesStrLength = getBytesStrLength(validateStr);

int chineseLength = getChineseLength(validateStr);

int regexpLength = getRegExpLength(validateStr);

System.out.println("length:" + validateStr.length());

System.out.println("getBytesLength:" + bytesStrLength

+ ",chineseLength:" + chineseLength + ",regexpLength:"

+ regexpLength);

}

/**

* 根据字符编码 字节数生成一个临时的字符串

*

* @param validateStr

* @return

*/

public static int getBytesStrLength(String validateStr) {

startTime = System.currentTimeMillis();

String tempStr = "";

try {

tempStr = new String(validateStr.getBytes("gb2312"), "iso-8859-1");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

System.out.println("getBytesStrLength time:"

+ (System.currentTimeMillis() - startTime));

return tempStr.length();

}

/**

* 获取字符串的长度,如果有中文,则每个中文字符计为2位

*

* @param validateStr

* 指定的字符串

* @return 字符串的长度

*/

public static int getChineseLength(String validateStr) {

startTime = System.currentTimeMillis();

int valueLength = 0;

String chinese = "[\u0391-\uFFE5]";

/* 获取字段值的长度,如果含中文字符,则每个中文字符长度为2,否则为1 */

for (int i = 0; i < validateStr.length(); i++) {

/* 获取一个字符 */

String temp = validateStr.substring(i, i + 1);

/* 判断是否为中文字符 */

if (temp.matches(chinese)) {

/* 中文字符长度为2 */

valueLength += 2;

} else {

/* 其他字符长度为1 */

valueLength += 1;

}

}

System.out.println("getChineseLength time:"

+ (System.currentTimeMillis() - startTime));

return valueLength;

}

/**

* 利用正则表达式将每个中文字符转换为"**" 匹配中文字符的正则表达式: [\u4e00-\u9fa5]

* 匹配双字节字符(包括汉字在内):[^\x00-\xff]

*

* @param validateStr

* @return

*/

public static int getRegExpLength(String validateStr) {

startTime = System.currentTimeMillis();

// String temp = validateStr.replaceAll("[\u4e00-\u9fa5]", "**");

String temp = validateStr.replaceAll("[^\\x00-\\xff]", "**");

System.out.println("getRegExpLength time:"

+ (System.currentTimeMillis() - startTime));

return temp.length();

}

}

结果:

getBytesStrLength time:2

getChineseLength time:30

getRegExpLength time:11

length:14336

getBytesLength:21504,chineseLength:21504,regexpLength:21504

建议:

使用 方式三:利用正则表达式 方式

方式一:根据字符编码 字节数生成一个临时的字符串(需要确定字符编码,不同编码结果长度不同)

方式二:获取字符串的长度,如果有中文,则每个中文字符计为2位(比较耗时)

java 中英文长度_Java--计算中英文长度的若干种方法相关推荐

  1. java 不知道类名_Java 中获取类名的三种方法,你知道几种?

    之前我们分享过Java高级篇--深入浅出Java类加载机制这篇文章,今天来带你了解获取类名的三种方法. 获取类名的方法 Java 中获取类名的方式主要有以下三种. getName() 返回的是虚拟机里 ...

  2. java 读取控制台_Java从控制台读入数据的几种方法总结

    这里记录Java中从控制台读入信息的几种方式,已备后查! (1)JDK 1.4(JDK 1.5和JDK 1.6也都兼容这种方法) public class TestConsole1 { public ...

  3. java保留小数_java保留两位小数4种方法

    java保留两位小数4种方法 方法一:String的format方法(推荐) double f = 111231.5585; System.out.println(String.format(&quo ...

  4. java获取文件大小_Java实现获取文件大小的几种方法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 目前Java获取文件大小的方法有两种: 1.通过file的length()方法获取: 2.通过流式方法获取: 通过流式方法又有两种,分别是旧的java.i ...

  5. java时间代码_java获取当前时间的四种方法代码实例

    这篇文章主要介绍了java获取当前时间的四种方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 第一种:Date类 public class ...

  6. java当前时间_java 获取当前时间的三种方法

    总结java里面关于获取当前时间的一些方法 System.currentTimeMillis() 获取标准时间可以通过System.currentTimeMillis()方法获取,此方法不受时区影响, ...

  7. java 取名字_Java 中获取类名的三种方法,你知道几种?

    之前我们分享过Java高级篇--深入浅出Java类加载机制这篇文章,今天来带你了解获取类名的三种方法. 获取类名的方法 Java 中获取类名的方式主要有以下三种. getName()返回的是虚拟机里面 ...

  8. java 复制文件_Java中复制文件的4种方法

    Java拷贝文件是一种非常常见的操作.但是java.io.File类没有任何快捷方法可以将文件从源复制到目标文件.在这里,我们将了解学习可以在java中复制文件的四种不同方法. 方法一:使用Strea ...

  9. java 获取类名_Java中获取类名的3种方法!

    获取类名的方法 Java 中获取类名的方式主要有以下三种. getName() 返回的是虚拟机里面的class的类名表现形式. getCanonicalName() 返回的是更容易理解的类名表示. g ...

  10. java文件拷贝_Java实现文件拷贝的4种方法

    第一种方法:古老的方式 public static long forJava(File f1,File f2) throws Exception{ long time=new Date().getTi ...

最新文章

  1. ubuntu18.04.4 pip3 换清华、阿里、豆瓣 源
  2. 百度蜘蛛动态网页ajax,百度SEO优化百度蜘蛛可读内容
  3. Bootstrap4+MySQL前后端综合实训-Day08-AM【多表查询sql语句、关联数据的假删除、自动增长主键的获取、栏目管理“数据编辑”按钮的实现】
  4. 的引用_懵!啥是Java软引用、弱引用、虚引用?
  5. 狼殿下高清壁纸|不用等的好剧!
  6. Acticles about Interface!
  7. Rust: Rust 异步入门 (作者洋芋,来自Rust语言中文社区)
  8. 苹果电脑是“监狱”、弃用 Ubuntu,GNU 创始人斯托曼谈自由软件运动现状
  9. uni-app 安卓实现监听 PDA 扫码枪等设备按钮
  10. redis的lpush、rpush、rpop、lpop位置的简单理解
  11. APP支付(微信、支付宝)
  12. Android Hal层回调APP应用接口
  13. 软件工程师——计算机组成原理
  14. 【JavaWEB】项目实战-黑马面面
  15. mac linux网卡驱动下载官网下载,linux | 网卡驱动
  16. 使用飞桨PaddleHub实现将视频动作转化为皮影戏
  17. window下Java诊断工具arthas 实操心得
  18. Hadoop常用端口web界面
  19. vue节日倒计时列表
  20. 转:免费国际长途 热门应用Line发布中文版

热门文章

  1. Windows 11 修改Edge按 Alt+Tab 键为单个窗口
  2. 用PPT给证件换背景或衣服,so easy~
  3. Doc2Vec模型介绍及使用
  4. centos设置ftp默认端口
  5. 机器学习、深度学习、计算机视觉、自然语言处理及应用案例
  6. 鸿蒙系统背后的故事,华为“鸿蒙”刷屏背后,这7本书是中国人的终极浪漫
  7. 笔记本电脑进水怎么办?
  8. RFID第二版答案-第六章
  9. Linux服务器被黑用作矿机的排查过程 ld-linux-x86-64 占用CPU过高
  10. php获得当月的节假日函数(包含周末,年度节假日)