Java 按指定长度截取字符串,考虑全角半角
2015-03-25 22:15
295 查看
于用 Java 来截取指定长度的字符串,我在网上看到很多帖子和方法,大都是说用 substring() ,但是如果考虑到全角半角的话,这是怎么也达不到期望值的。因为之前自己也用到过,所以把自己整理好的一些东西拿出来,希望能和大家分享下。如果还有更好更简洁的方法,望大侠们指点一二。
注:所有测试都是基于该值已通过必须输入的检查。
1. subByStrLenth() 在不考虑全角的情况下,即假定该字符串都是半角的。
2. subByFullWidth() 如果已确保该值都是由全角字符,即字符都是全角且指定长度是大于 0 的偶数的情况下。
3. subByStrByte() 考虑全角半角的截取,且舍掉半个汉字后,长度不足的情况下是否要在右边补空格。
Java代码
// 按指定的长度来截取字符串,不管全角半角,一个字符一个长度。
[b]public[/b] [b]static[/b] String subByStrLength(String value, [b]int[/b] length) {
[b]return[/b] value.length() > length ? [b]new[/b] String(value.substring(0, length)) : value;
}
// 按指定的长度来截取字符串,前提是字符串是全角的,指定长度是大于0的偶数。
[b]public[/b] [b]static[/b] String subByFullWidth(String value, [b]int[/b] length) {
[b]return[/b] value.getBytes().length > length ? [b]new[/b] String(value.getBytes(), 0, length) : value;
}
// 按指定的长度下,考虑字符的全角半角,且当舍掉最后半个汉字后,长度不足的情况下是否要在右边补空格。
[b]public[/b] [b]static[/b] String subByStrByte(String value, [b]int[/b] length, [b]boolean[/b] paddingSpace) {
String valueTemp = "";
// 指定的长度下,考虑字符的全角半角,最后的汉字。
[b]if[/b] (value.getBytes().length > length) {
[b]for[/b] ([b]char[/b] c : value.toCharArray()) {
[b]if[/b] (valueTemp.getBytes().length <= length) {
valueTemp += c;
[b]if[/b] (valueTemp.getBytes().length == length) {
[b]break[/b];
} [b]else[/b] [b]if[/b] (valueTemp.getBytes().length > length) {
[b]char[/b][] charTemp = valueTemp.toCharArray();
valueTemp = "";
[b]for[/b] ([b]int[/b] i = 0; i < charTemp.length - 1; i++) {
valueTemp += charTemp[i];
}
[b]break[/b];
}
}
}
value = valueTemp;
}
// 指定的长度下,长度不足的情况是否要在右边补空格。
[b]if[/b] (paddingSpace) {
StringBuffer valueBuffer = [b]new[/b] StringBuffer(value);
[b]for[/b] ([b]int[/b] i = 0; i < length - value.getBytes().length; i++) {
valueBuffer.append(" ");
}
[b]return[/b] valueBuffer.toString();
}
[b]return[/b] value;
}
// 字符串的截取测试
[b]public[/b] [b]static[/b] [b]void[/b] main(String[] args) {
String str1 = "字符串的截取";
String str2 = "字符串的截取test";
System.out.println(subByStrByte(str2, 7, [b]true[/b]));
System.out.println(subByStrByte(str2, 7, [b]false[/b]));
System.out.println(subByStrLength(str2, 7));
System.out.println(subByFullWidth(str1, 6));
}
第一个输出结果是带空格的字符串“字符串 ”。
运行结果:
字符串
字符串
字符串的截取 t
字符串
注:所有测试都是基于该值已通过必须输入的检查。
1. subByStrLenth() 在不考虑全角的情况下,即假定该字符串都是半角的。
2. subByFullWidth() 如果已确保该值都是由全角字符,即字符都是全角且指定长度是大于 0 的偶数的情况下。
3. subByStrByte() 考虑全角半角的截取,且舍掉半个汉字后,长度不足的情况下是否要在右边补空格。
Java代码
// 按指定的长度来截取字符串,不管全角半角,一个字符一个长度。
[b]public[/b] [b]static[/b] String subByStrLength(String value, [b]int[/b] length) {
[b]return[/b] value.length() > length ? [b]new[/b] String(value.substring(0, length)) : value;
}
// 按指定的长度来截取字符串,前提是字符串是全角的,指定长度是大于0的偶数。
[b]public[/b] [b]static[/b] String subByFullWidth(String value, [b]int[/b] length) {
[b]return[/b] value.getBytes().length > length ? [b]new[/b] String(value.getBytes(), 0, length) : value;
}
// 按指定的长度下,考虑字符的全角半角,且当舍掉最后半个汉字后,长度不足的情况下是否要在右边补空格。
[b]public[/b] [b]static[/b] String subByStrByte(String value, [b]int[/b] length, [b]boolean[/b] paddingSpace) {
String valueTemp = "";
// 指定的长度下,考虑字符的全角半角,最后的汉字。
[b]if[/b] (value.getBytes().length > length) {
[b]for[/b] ([b]char[/b] c : value.toCharArray()) {
[b]if[/b] (valueTemp.getBytes().length <= length) {
valueTemp += c;
[b]if[/b] (valueTemp.getBytes().length == length) {
[b]break[/b];
} [b]else[/b] [b]if[/b] (valueTemp.getBytes().length > length) {
[b]char[/b][] charTemp = valueTemp.toCharArray();
valueTemp = "";
[b]for[/b] ([b]int[/b] i = 0; i < charTemp.length - 1; i++) {
valueTemp += charTemp[i];
}
[b]break[/b];
}
}
}
value = valueTemp;
}
// 指定的长度下,长度不足的情况是否要在右边补空格。
[b]if[/b] (paddingSpace) {
StringBuffer valueBuffer = [b]new[/b] StringBuffer(value);
[b]for[/b] ([b]int[/b] i = 0; i < length - value.getBytes().length; i++) {
valueBuffer.append(" ");
}
[b]return[/b] valueBuffer.toString();
}
[b]return[/b] value;
}
// 字符串的截取测试
[b]public[/b] [b]static[/b] [b]void[/b] main(String[] args) {
String str1 = "字符串的截取";
String str2 = "字符串的截取test";
System.out.println(subByStrByte(str2, 7, [b]true[/b]));
System.out.println(subByStrByte(str2, 7, [b]false[/b]));
System.out.println(subByStrLength(str2, 7));
System.out.println(subByFullWidth(str1, 6));
}
第一个输出结果是带空格的字符串“字符串 ”。
运行结果:
字符串
字符串
字符串的截取 t
字符串
相关文章推荐
- 按指定长度截取字符串,考虑全角半角
- 前后台实现精确截取指定长度字符串(考虑全角半角)
- 区分全角和半角的字符串指定长度截取(或填充)
- 区分全角和半角的字符串指定长度截取(或填充)
- 字符串截取指定长度字节数(Java方法实例,注:同样思路js也适用)
- java按指定的字节Byte的起始位置截取长度截取字符串
- 默认字符编码是UTF8的linux服务器,java计算字符串长度(半角算一个,全角算两个)
- 一个C#中截取指定长度字符串的方法(含盖半全角问题)
- 字符串截取指定长度字节数(Java方法实例,注:同样思路js也适用)
- Java精确截取字符串,取得字符串前面指定长度字符函数
- Java精确截取字符串/获取字符串前指定长度字符函数
- java中截取指定长度的字符串的方法
- 一个C#中截取指定长度字符串的方法(含盖半全角问题)
- 用C#截取指定长度的中英文混合字符串
- java中按字节数的长度来截取字符串,并以...来忽略
- 用C#截取指定长度的中英文混合字符串 改进版
- 按指定长度截取字符串(以字节计算长度)
- 确定包含全角和半角字符的字符串长度
- 截取指定长度的字符串,超过指定长度的加...
- 类库------对一些字符串进行操作的类1.判断输入是否数字2.截取字符串函数3.过滤输入信息4.生成随机数5.生成验证码图片6.获取汉字第一个拼音7.半角转全角8.全角转半角