java 中、日、韩、英字符串截取

来源:互联网 发布:怎样装修淘宝店铺视频教程 编辑:程序博客网 时间:2024/04/27 17:50
StringTrimUtils,使用charArray,Java内部使用unicode,不用在意编码

java 代码
 
  1. public class StringTrimUtils {   
  2.    
  3.     /**  
  4.      * 截取一段字符的长度(汉、日、韩文字符长度为2),不区分中英文,如果数字不正好,则少取一个字符位  
  5.      *   
  6.      * @param str 原始字符串  
  7.      * @param specialCharsLength 截取长度(汉、日、韩文字符长度为2)  
  8.      * @return  
  9.      */   
  10.     public static String trim(String str, int specialCharsLength) {   
  11.         if (str == null || "".equals(str) || specialCharsLength < 1) {   
  12.             return "";   
  13.         }   
  14.         char[] chars = str.toCharArray();   
  15.         int charsLength = getCharsLength(chars, specialCharsLength);   
  16.         return new String(chars, 0, charsLength);   
  17.     }   
  18.    
  19.     /**  
  20.      * 获取一段字符的长度,输入长度中汉、日、韩文字符长度为2,输出长度中所有字符均长度为1  
  21.      * @param chars 一段字符  
  22.      * @param specialCharsLength 输入长度,汉、日、韩文字符长度为2  
  23.      * @return 输出长度,所有字符均长度为1  
  24.      */   
  25.     private static int getCharsLength(char[] chars, int specialCharsLength) {   
  26.         int count = 0;   
  27.         int normalCharsLength = 0;   
  28.         for (int i = 0; i < chars.length; i++) {   
  29.             int specialCharLength = getSpecialCharLength(chars[i]);   
  30.             if (count <= specialCharsLength - specialCharLength) {   
  31.                 count += specialCharLength;   
  32.                 normalCharsLength++;   
  33.             } else {   
  34.                 break;   
  35.             }   
  36.         }   
  37.         return normalCharsLength;   
  38.     }   
  39.    
  40.     /**  
  41.      * 获取字符长度:汉、日、韩文字符长度为2,ASCII码等字符长度为1  
  42.      * @param c 字符  
  43.      * @return 字符长度  
  44.      */   
  45.     private static int getSpecialCharLength(char c) {   
  46.         if (isLetter(c)) {   
  47.             return 1;   
  48.         } else {   
  49.             return 2;   
  50.         }   
  51.     }   
  52.    
  53.     /**  
  54.      * 判断一个字符是Ascill字符还是其它字符(如汉,日,韩文字符)  
  55.      *   
  56.      * @param char c, 需要判断的字符  
  57.      * @return boolean, 返回true,Ascill字符  
  58.      */   
  59.     private static boolean isLetter(char c) {   
  60.         int k = 0x80;   
  61.         return c / k == 0 ? true : false;   
  62.     }   
  63. }