按指定长度截取字符串,考虑全角半角
2012-06-11 18:10
537 查看
关于用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; } } } } // 指定的长度下,长度不足的情况是否要在右边补空格。 if (paddingSpace) { StringBuffer valueBuffer = new StringBuffer(valueTemp); for (int i = 0; i < length - valueTemp.getBytes().length; i++) { valueBuffer.append(" "); } return valueBuffer.toString(); } return valueTemp; } // 字符串的截取测试 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
字符串
相关文章推荐
- 前后台实现精确截取指定长度字符串(考虑全角半角)
- Java 按指定长度截取字符串,考虑全角半角
- 区分全角和半角的字符串指定长度截取(或填充)
- 区分全角和半角的字符串指定长度截取(或填充)
- 一个C#中截取指定长度字符串的方法(含盖半全角问题)
- 一个C#中截取指定长度字符串的方法(含盖半全角问题)
- 从一个包含汉字和其他字符的字符串中截取指定字节长度的字符串,不可以出现中文乱码
- 截取指定长度字符串
- 用C#截取指定长度的中英文混合字符串的最终算法
- c# 判断字符是否是全角, 获取字符串的字节数 , 获取字符串指定长度字节数的字符串
- 用C#截取指定长度的中英文混合字符串 改进版
- Oracle截取字符串去掉字段末尾指定长度的字符
- 判断全角半角混合字符串的字节数是否超过指定的字节数。(半角被认为是一个字节)
- C#截取指定长度中英文字符串方法
- Qt上截取中英文混合字符串的指定长度内容
- 截取指定长度的字符串(UTF-8专用 汉字和大写字母长度算1,其它字符长度算0.5)
- 截取指定长度的字符串,区分汉字和字符
- .NET常用类与方法——截取指定长度的字符串并在末尾加入指定字
- c#中英文混合字符串截取指定长度