于用
Java
来截取指定长度的字符串,我在网上看到很多帖子和方法,大都是说用
substring()
,但是如果考虑到全角半角的话,这是怎么也达不到期望值的。因为之前自己也用到过,所以把自己整理好的一些东西拿出来,希望能和大家分享下。如果还有更好更简洁的方法,望大侠们指点一二。
注:所有测试都是基于该值已通过必须输入的检查。
1.
subByStrLenth()
在不考虑全角的情况下,即假定该字符串都是半角的。
2.
subByFullWidth()
如果已确保该值都是由全角字符,即字符都是全角且指定长度是大于
0
的偶数的情况下。
3.
subByStrByte()
考虑全角半角的截取,且舍掉半个汉字后,长度不足的情况下是否要在右边补空格。
// 按指定的长度来截取字符串,不管全角半角,一个字符一个长度。
public static String subByStrLength(String value, int length) {
return value.length() > length ? new String(value.substring(0, length)) : value;
}
// 按指定的长度来截取字符串,前提是字符串是全角的,指定长度是大于0的偶数。
public static String subByFullWidth(String value, int length) {
return value.getBytes().length > length ? new String(value.getBytes(), 0, length) : value;
}
// 按指定的长度下,考虑字符的全角半角,且当舍掉最后半个汉字后,长度不足的情况下是否要在右边补空格。
public static String subByStrByte(String value, int length, boolean paddingSpace) {
String valueTemp = "";
// 指定的长度下,考虑字符的全角半角,最后的汉字。
if (value.getBytes().length > length) {
for (char c : value.toCharArray()) {
if (valueTemp.getBytes().length <= length) {
valueTemp += c;
if (valueTemp.getBytes().length == length) {
break;
} else if (valueTemp.getBytes().length > length) {
char[] charTemp = valueTemp.toCharArray();
valueTemp = "";
for (int i = 0; i < charTemp.length - 1; i++) {
valueTemp += charTemp[i];
}
break;
}
}
}
value = valueTemp;
}
// 指定的长度下,长度不足的情况是否要在右边补空格。
if (paddingSpace) {
StringBuffer valueBuffer = new StringBuffer(value);
for (int i = 0; i < length - value.getBytes().length; i++) {
valueBuffer.append(" ");
}
return valueBuffer.toString();
}
return value;
}
// 字符串的截取测试
public static void main(String[] args) {
String str1 = "字符串的截取";
String str2 = "字符串的截取test";
System.out.println(subByStrByte(str2, 7, true));
System.out.println(subByStrByte(str2, 7, false));
System.out.println(subByStrLength(str2, 7));
System.out.println(subByFullWidth(str1, 6));
}
第一个输出结果是带空格的字符串“字符串
”。
运行结果:
字符串
字符串
字符串的截取
t
字符串
分享到:
相关推荐
根据提供的文件信息,本文将详细解释如何在前后端开发中实现对字符串进行精确截取,同时考虑到全角和半角字符的区别。这个问题在处理多语言环境下的文本时尤为重要,因为不同语言中的字符宽度可能有所不同,这直接...
需要注意的是,在截取字符串时,我们必须考虑到编码方式对汉字占用字节长度的影响。这是因为,如果错误地估计了字节长度,就有可能导致汉字被截断,从而引发错误。例如,在某些编码方式下,一个汉字可能由三个字节...
以上代码展示了如何使用`.gblen()`方法计算字符串长度,并使用`.gbtrim()`方法来截取字符串并添加省略符。注意,在计算长度时,中文字符被视为两个字符长度。因此,当指定长度为10时,最多可以显示5个汉字。如果汉字...
5. 字符串截取函数:substr,substring 24 6. 字符串截取函数:substr,substring 24 7. 字符串转大写函数:upper,ucase 24 8. 字符串转小写函数:lower,lcase 25 9. 去空格函数:trim 25 10. 左边去空格函数:ltrim ...
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
wrf转mp4播放器1.1.1
内容概要:本文档详细介绍了如何在Simulink中设计一个满足特定规格的音频带ADC(模数转换器)。首先选择了三阶单环多位量化Σ-Δ调制器作为设计方案,因为这种结构能在音频带宽内提供高噪声整形效果,并且多位量化可以降低量化噪声。接着,文档展示了具体的Simulink建模步骤,包括创建模型、添加各个组件如积分器、量化器、DAC反馈以及连接它们。此外,还进行了参数设计与计算,特别是过采样率和信噪比的估算,并引入了动态元件匹配技术来减少DAC的非线性误差。性能验证部分则通过理想和非理想的仿真实验评估了系统的稳定性和各项指标,最终证明所设计的ADC能够达到预期的技术标准。 适用人群:电子工程专业学生、从事数据转换器研究或开发的技术人员。 使用场景及目标:适用于希望深入了解Σ-Δ调制器的工作原理及其在音频带ADC应用中的具体实现方法的人群。目标是掌握如何利用MATLAB/Simulink工具进行复杂电路的设计与仿真。 其他说明:文中提供了详细的Matlab代码片段用于指导读者完成整个设计流程,同时附带了一些辅助函数帮助分析仿真结果。
国网台区终端最新规范
《基于YOLOv8的智慧农业水肥一体化控制系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计
GSDML-V2.33-LEUZE-AMS3048i-20170622.xml
微信小程序项目课程设计,包含LW+ppt
微信小程序项目课程设计,包含LW+ppt
终端运行进度条脚本
幼儿园预防肺结核教育培训课件资料
python,python相关资源
《基于YOLOv8的智慧校园电动车充电桩状态监测系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计
deepseek 临床之理性软肋.pdf
SM2258XT量产工具(包含16种程序),固态硬盘量产工具使用
RecyclerView.zip
水务大脑让水务运营更智能(23页)