题目:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC在DEF",6,应该输出为"我ABC"而不是"我ABC+'在'字的一半"。我先发一下自己的代码吧,如下:
==================我 是 性 感 的 分 界 线========================
public class SplitString 

    public String myStringSplit(String SplitStr,int SplitByte)
    {
        StringBuffer sb=new StringBuffer("");
        for(int i=0;i<SplitByte;i++)
        {
            int ch=SplitStr.charAt(i);
            if(ch>0&&ch<255)
                sb.append((char)ch);
            else
            {//如果是汉字
                sb.append((char)ch);
                SplitByte--;
            }
        }
        
        return (sb.toString()).substring(0, SplitByte);
    }
    
    public static void main(String[] args) 
    {
        String str="我ABC在DEF";
        SplitString splitString = new SplitString(); 
        System.out.println(splitString.myStringSplit(str,4)); 
        System.out.println(splitString.myStringSplit(str,6)); 
    } 
}==================我 是 性 感 的 分 界 线========================
欢迎大家拍砖!!!

解决方案 »

  1.   

    答:我来一个.public     static String split(String s,int n)
        {
            int d=n,i=0;
            while( i<s.length() && (d>1 || d==1 && s.charAt(i)<256)   )
            {
                if(s.charAt(i)<256) d--;  
                  else    d-=2;
               i++;       
            }
            return s.substring(0,i);
        }
    若:
    System.out.println(split("我A汉BC字D",4));
    System.out.println(split("我A汉BC字D",5));
    System.out.println(split("我A汉BC字D",12));
    则:
    我A 
    我A汉 
    我A汉BC字D
      

  2.   


        public String myStringSplit(String SplitStr,int SplitByte) 
        { 
            double d = 0.0;
            boolean b = false;
            for(int i=0;i <SplitByte;i++) 
            { 
                if(ch>0&&ch <255) 
                    d += 1.0;
                else 
                    d += 0.5;
            } 
            return SplitStr.substring(0,(int)d); 
        }   //不知道可不可以,网吧不能测试了
      

  3.   

    看来我的有漏洞啊。
    如果SplitByte大于SplitStr的字符串长度的话,那就会有数组越界的问题了修正函数为public String myStringSplit(String splitStr,int splitByte)
    {
        int len=splitStr.getBytes().length;
        if(len<splitByte)return splitStr;
     //如果所取大于字符串字节数,直接返回
        StringBuffer sb=new StringBuffer("");
        for(int i=0;i<splitByte;i++)
        {
            int ch=splitStr.charAt(i);
            if(ch>0&&ch<255)
                sb.append((char)ch);
            else
            {//如果是汉字
                sb.append((char)ch);
                splitByte--;
            }
        }
        return (sb.toString()).substring(0, splitByte);
    }
      

  4.   


    public String myStringSplit(String splitStr, int splitByte)
    {
    StringBuffer sb = new StringBuffer("");
    int byteLen = 0;
    for (int i = 0; i < splitStr.length(); i++)
    {
    String str = splitStr.substring(i, i + 1);
    byteLen += str.getBytes().length;
    if (byteLen <= splitByte)
    {
    sb.append(str);
    }
    }
    return sb.toString();
    }
      

  5.   

    我感觉还是截取字符串简单些 public String myStringSplit(String SplitStr,int wordLength) {
    int splitLength = (int) Math.ceil((double)wordLength/2d);
    if(splitLength>SplitStr.length()) splitLength = SplitStr.length();
    return SplitStr.substring(0, splitLength);
    }
      

  6.   

    static String s(String str, int n) {
    if (n <= 0)// 长度小于等于0,返回""
    return "";
    int count = str.length();
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < count; i++) {// 循环字符串
    char c = str.charAt(i);
    if (c >= 256) {// 非单字符
    if ((n -= 2) >= 0)// 如果-2>=0,取字符
    sb.append(c);
    else
    // 否则结束循环
    break;
    } else if (--n >= 0)
    sb.append(c);
    else
    break;
    }
    return sb.toString();
    }
      

  7.   

    static String s(String str, int n) {
    if (n <= 0)// 长度小于等于0,返回""
    return "";
    int count = str.length();
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < count; i++) {// 循环字符串
    char c = str.charAt(i);
    if (c >= 256) {// 非单字符
    if ((n -= 2) >= 0)// 如果-2>=0,取字符
    sb.append(c);
    else
    // 否则结束循环
    break;
    } else if (--n >= 0)
    sb.append(c);
    else
    break;
    }
    return sb.toString();
    }