Java 按字节截取字符串算法

编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。

方法一

public class Tools {  
     public Tools() {     
     }      
    /**  
      * 字符串按字节截取  
      * @param str 原字符  
      * @param len 截取长度  
      * @return String  
      * @author kinglong  
      * @since 2006.07.20  
      */     
     public static String splitString(String str, int len) {     
            return splitString(str, len, ".......");     
      }     
    
     /**  
       * 字符串按字节截取  
       * @param str 原字符  
       * @param len 截取长度  
       * @param elide 省略符  
       * @return String  
       * @author kinglong  
       * @since 2006.07.20  
       */     
      public static String splitString(String str,int len,String elide) {     
             if (str == null) {     
                    return "";     
              }     
             byte[] strByte = str.getBytes();     
             int strLen = strByte.length;     
             //int elideLen = (elide.trim().length() == 0) ? 0 : elide.getBytes().length;     
             if (len >= strLen || len < 1) {     
                    return str;     
              }     
            /* if (len - elideLen > 0) {    
                     len = len - elideLen;    
              }  */   
             int count = 0;     
             for (int i = 0; i < len; i++) {     
                    int value = (int) strByte[i];     
                    if (value < 0) {  //通过尝试发现(gb2312,utf8)汉字确实会占用多于一个字节(2,3),而且都是负值  

count++;     
                     }     
              }     
             if (count % 2 != 0) {  //如果platform默认编码是utf8时会出错,某些置不能打印出汉字 

len = (len == 1) ? len + 1 : len - 1;     
              }     
             return new String(strByte, 0, len) + elide.trim();     
       }    
      /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        Tools cs = new Tools();  
        //String s = "a加b等cc于c";  
        //String s = "a加b等cc于c";  
        String s ="aaas学位英语专区 学s位英语专区 学s位英语专区 学位英语专区";   
        try{  
            System.out.println(cs.splitString(s, 20));  
        }catch(Exception e){  
            e.printStackTrace();  
        }  
    }  
}  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwpjzs.html