Java 按指定长度截取字符串,考虑全角半角

来源:互联网 发布:dj网络红歌 编辑:程序博客网 时间:2024/05/19 19:44

于用 Java 来截取指定长度的字符串,我在网上看到很多帖子和方法,大都是说用 substring() ,但是如果考虑到全角半角的话,这是怎么也达不到期望值的。因为之前自己也用到过,所以把自己整理好的一些东西拿出来,希望能和大家分享下。如果还有更好更简洁的方法,望大侠们指点一二。

 

注:所有测试都是基于该值已通过必须输入的检查。

1.  subByStrLenth() 在不考虑全角的情况下,即假定该字符串都是半角的。

2.  subByFullWidth() 如果已确保该值都是由全角字符,即字符都是全角且指定长度是大于 0 的偶数的情况下。

3.  subByStrByte() 考虑全角半角的截取,且舍掉半个汉字后,长度不足的情况下是否要在右边补空格。


Java代码

 收藏代码
  1. // 按指定的长度来截取字符串,不管全角半角,一个字符一个长度。      
  2. public static String subByStrLength(String value, int length) {  
  3.   
  4.     return value.length() > length ? new String(value.substring(0, length)) : value;  
  5. }  
  6.   
  7. // 按指定的长度来截取字符串,前提是字符串是全角的,指定长度是大于0的偶数。  
  8. public static String subByFullWidth(String value, int length) {  
  9.   
  10.     return value.getBytes().length > length ? new String(value.getBytes(), 0, length) : value;  
  11. }  
  12.   
  13. // 按指定的长度下,考虑字符的全角半角,且当舍掉最后半个汉字后,长度不足的情况下是否要在右边补空格。  
  14. public static String subByStrByte(String value, int length, boolean paddingSpace) {  
  15.   
  16.     String valueTemp = "";  
  17.   
  18.     // 指定的长度下,考虑字符的全角半角,最后的汉字。  
  19.     if (value.getBytes().length > length) {  
  20.         for (char c : value.toCharArray()) {  
  21.             if (valueTemp.getBytes().length <= length) {  
  22.                 valueTemp += c;  
  23.   
  24.                 if (valueTemp.getBytes().length == length) {  
  25.                     break;  
  26.   
  27.                 } else if (valueTemp.getBytes().length > length) {  
  28.                     char[] charTemp = valueTemp.toCharArray();  
  29.                     valueTemp = "";  
  30.   
  31.                     for (int i = 0; i < charTemp.length - 1; i++) {  
  32.                         valueTemp += charTemp[i];  
  33.                     }  
  34.   
  35.                     break;  
  36.                 }  
  37.             }  
  38.         }  
  39.         value = valueTemp;  
  40.     }  
  41.   
  42.     // 指定的长度下,长度不足的情况是否要在右边补空格。  
  43.     if (paddingSpace) {  
  44.         StringBuffer valueBuffer = new StringBuffer(value);  
  45.         for (int i = 0; i < length - value.getBytes().length; i++) {  
  46.             valueBuffer.append(" ");  
  47.         }  
  48.   
  49.         return valueBuffer.toString();  
  50.     }  
  51.   
  52.     return value;  
  53. }  
  54.   
  55. // 字符串的截取测试  
  56. public static void main(String[] args) {  
  57.   
  58.     String str1 = "字符串的截取";  
  59.     String str2 = "字符串的截取test";  
  60.   
  61.     System.out.println(subByStrByte(str2, 7true));  
  62.     System.out.println(subByStrByte(str2, 7false));  
  63.   
  64.     System.out.println(subByStrLength(str2, 7));  
  65.     System.out.println(subByFullWidth(str1, 6));  
  66. }  


 

 


第一个输出结果是带空格的字符串“字符串 ”。

运行结果:

 

字符串

字符串

字符串的截取 t


字符串

0 0