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

解决方案 »

  1.   

    String str = "...";
    byte[] bytes = str.getBytes("GBK");
    然后把bytes数组进行分割,假如第i到第j个(不包括第j个)为一段
    String sSec = new String(bytes, i, j-i, "GBK");分割时注意,汉字的高字节为负数,其他均为正数,根据这个特点进行分割,就不会把汉字分成两个字节
      

  2.   

    问题都不太对哦
    据我所知,java用的unicode,英语字母和汉字的长度是一样的,都是两个字节,难道在字符串里面又不是了?
      

  3.   

    没想到好的方法,因为,这个涉及到编码问题,
    如果使用GB2313的话一个汉字会是2个字节,
    而使用UTF-8的话,将不会是2个字节。如果有其他语言的文字的话,更麻烦。
      

  4.   

    比较傻的方法    public static String getWord(String word, int n) {
            if (word.getBytes().length <= n) {
                return word;
            }
            if (word.getBytes()[n] < 0) {
                for (int i = word.length(); i > 0; i--) {
                    String tempWord = word.substring(0, i);
                    if (word.substring(0, i).getBytes().length <= n) {
                        return tempWord;
                    }
                }
            }
            return "";
        }
      

  5.   

    错了,重发
        public static String getWord(String word, int n) {
            if (word.getBytes().length <= n) {
                return word;
            }
            for (int i = word.length(); i > 0; i--) {
                String tempWord = word.substring(0, i);
                if (word.substring(0, i).getBytes().length <= n) {
                    return tempWord;
                }
            }
            return "";
        }
      

  6.   

    public String SplitString(String str, int length){
    if(length >= str.getBytes().length)
    return str;
    int x = 0;
    int y = 0;
    for(int i=0;i<length;i++){
    if(str.charAt(i)>255)
    x += 2; 
    else
    x += 1;
    y += 1;
    if(x == length){
    return (str.substring(0, y));
    }
    if(x > length){
    return (str.substring(0, y - 1));
    }
    }
    return "";
    }
      

  7.   

    其实这个问题很简单,在JAVA中,中文和英文一样,都只占一个字节的空间。就以你的“我ABC汉DEF”为例:
    class Length{
    public static void main(String[] args){
    String s="我ABC汉DEF";
    String str1=s.substring(0,1);
    String str2=s.substring(1,4);
    String str3=s.substring(4,5);
    String str4=s.substring(5,8);

    System.out.println(str1);
    System.out.println(str2);
    System.out.println(str3);
    System.out.println(str4);
    }
    }这样写就可以正确输出想要的结果咯!!!
    楼主赶快给分吧,谢谢了!!
      

  8.   

    经测试,s3x4和melas的代码都是正确的,送分(: