java 中英文长度_Java--计算中英文长度的若干种方法
在项目开发中经常碰到到输入字符的校验,特别是中英文混合在一起的校验。而为了满足校验的需求,有时需要计算出中英文的长度。
本文将通过几种常用的方法实现长度的计算:
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--计算中英文长度的若干种方法相关推荐
- java 不知道类名_Java 中获取类名的三种方法,你知道几种?
之前我们分享过Java高级篇--深入浅出Java类加载机制这篇文章,今天来带你了解获取类名的三种方法. 获取类名的方法 Java 中获取类名的方式主要有以下三种. getName() 返回的是虚拟机里 ...
- java 读取控制台_Java从控制台读入数据的几种方法总结
这里记录Java中从控制台读入信息的几种方式,已备后查! (1)JDK 1.4(JDK 1.5和JDK 1.6也都兼容这种方法) public class TestConsole1 { public ...
- java保留小数_java保留两位小数4种方法
java保留两位小数4种方法 方法一:String的format方法(推荐) double f = 111231.5585; System.out.println(String.format(&quo ...
- java获取文件大小_Java实现获取文件大小的几种方法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 目前Java获取文件大小的方法有两种: 1.通过file的length()方法获取: 2.通过流式方法获取: 通过流式方法又有两种,分别是旧的java.i ...
- java时间代码_java获取当前时间的四种方法代码实例
这篇文章主要介绍了java获取当前时间的四种方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 第一种:Date类 public class ...
- java当前时间_java 获取当前时间的三种方法
总结java里面关于获取当前时间的一些方法 System.currentTimeMillis() 获取标准时间可以通过System.currentTimeMillis()方法获取,此方法不受时区影响, ...
- java 取名字_Java 中获取类名的三种方法,你知道几种?
之前我们分享过Java高级篇--深入浅出Java类加载机制这篇文章,今天来带你了解获取类名的三种方法. 获取类名的方法 Java 中获取类名的方式主要有以下三种. getName()返回的是虚拟机里面 ...
- java 复制文件_Java中复制文件的4种方法
Java拷贝文件是一种非常常见的操作.但是java.io.File类没有任何快捷方法可以将文件从源复制到目标文件.在这里,我们将了解学习可以在java中复制文件的四种不同方法. 方法一:使用Strea ...
- java 获取类名_Java中获取类名的3种方法!
获取类名的方法 Java 中获取类名的方式主要有以下三种. getName() 返回的是虚拟机里面的class的类名表现形式. getCanonicalName() 返回的是更容易理解的类名表示. g ...
- java文件拷贝_Java实现文件拷贝的4种方法
第一种方法:古老的方式 public static long forJava(File f1,File f2) throws Exception{ long time=new Date().getTi ...
最新文章
- ubuntu18.04.4 pip3 换清华、阿里、豆瓣 源
- 百度蜘蛛动态网页ajax,百度SEO优化百度蜘蛛可读内容
- Bootstrap4+MySQL前后端综合实训-Day08-AM【多表查询sql语句、关联数据的假删除、自动增长主键的获取、栏目管理“数据编辑”按钮的实现】
- 的引用_懵!啥是Java软引用、弱引用、虚引用?
- 狼殿下高清壁纸|不用等的好剧!
- Acticles about Interface!
- Rust: Rust 异步入门 (作者洋芋,来自Rust语言中文社区)
- 苹果电脑是“监狱”、弃用 Ubuntu,GNU 创始人斯托曼谈自由软件运动现状
- uni-app 安卓实现监听 PDA 扫码枪等设备按钮
- redis的lpush、rpush、rpop、lpop位置的简单理解
- APP支付(微信、支付宝)
- Android Hal层回调APP应用接口
- 软件工程师——计算机组成原理
- 【JavaWEB】项目实战-黑马面面
- mac linux网卡驱动下载官网下载,linux | 网卡驱动
- 使用飞桨PaddleHub实现将视频动作转化为皮影戏
- window下Java诊断工具arthas 实操心得
- Hadoop常用端口web界面
- vue节日倒计时列表
- 转:免费国际长途 热门应用Line发布中文版