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

解决方案 »

  1.   


    写的不好请大家批评:)public static String subStringByByte(String str , int byteLength){
       String tempStr = "";
       for(int i = 0;i < str.length();i++){
         tempStr = str.substring(0,i);
         if(tempStr.getBytes().length > byteLength){
           tempStr = str.substring(0,i-1);
           break;
         }else if(tempStr.getBytes().length == byteLength){
           tempStr = str.substring(0,i);
           break;
         }
       }
       return tempStr;
     }
     public static void main(String[] args){
       String str = "不ABC安DEF";   
       System.out.println("subStringByByte(str ,4 ) = " + subStringByByte(str,4));
       System.out.println("subStringByByte(str ,6 ) = " + subStringByByte(str,6));
     }
    运行结果:
    subStringByByte(str ,4 ) = 不AB
    subStringByByte(str ,6 ) = 不ABC
      

  2.   

    看到这个题目,觉得蛮有意思,试了试.不知道有没有问题
      public String getHalfStr(String tempstr ){
        StringBuffer sb = new StringBuffer();
        int tl = tempstr.length();
        char[] chars = tempstr.toCharArray();
        int cl = 0 ;
        for(int i = 0 ;i < chars.length;i++){
          char currentChar = chars[i];
          cl += String.valueOf(currentChar).getBytes().length;
          if (cl > tl)break;
          sb.append(currentChar);
        }
        return sb.toString();
      }
      

  3.   

    如果你按照 gb2312 或者 gbk 来编码String,你永远不会得到一半的汉字。如果你按照 iso8859-1 编码String,你就可能得到一般的汉字了
      

  4.   

    这个题目有问题吧,JAVA中是unicode编码,不论汉字还是英文字符都占两个字节.
      

  5.   

    应该是把字符串转为字节数组之后再进行截取,但不能有半个汉字。否则按string的length来截取的话,真的和楼上说的一样不会出现半个汉字