pblic String maxString(String str,int max){   return str.subString(0,max);}试试可不可以!

解决方案 »

  1.   

    把String拆成char[]数组,再判断每一个char是否大于255,大于的话当两个字节处理,否则做一个字节处理,最后一个字节注意一下。
      

  2.   

    先用getBytes 得到 byte[],然后截取前一半的byte[],判断截取的最后一位是否负数,如果是
    截取上次截的byte[]的0 至 length-1(看算法,是向前还是向后,错开一个字节),将
    得到的结果new String(byte[]);  结果就是了
      

  3.   

    还得把string装在一个数组里面,进行分别判断,是否是中文字符,然后再进行取算
      

  4.   

    如果是用java写的话,那就不用考虑由中文的问题,因为java的编码都是UNICODE
    你就按照lucumu(沸腾的咖啡) 的方式就可以了
      

  5.   

    public static String getBytes2(String s, int i)
        {
            if(s == null)
                return "";
    if (i > s.getBytes().length) {
    throw new StringIndexOutOfBoundsException("i > " + s.getBytes().length);
    }
    int start = i / 2;
    int j = 0;
    String s1 = s.substring(0, start);
    while (s1.getBytes().length < i) {
    s1 = s.substring(0, start + j);
    j++;
    }
            return s1;
        }可惜StringBuffer没有getBytes()方法,要不就能少产生许多垃圾了
      

  6.   

    sorry 把
    throw new StringIndexOutOfBoundsException("i > " + s.getBytes().length);
    改成
    throw new StringIndexOutOfBoundsException(i + " > " + s.getBytes().length);
    合适一点。TO:sandyen(杉叶)看错题目了吧?呵呵,刚开始我也看错了
      

  7.   

    public String getStr(String str , int max) {
        int length = str.substring(max-1 , max).getBytes().length;//截取max位置字符的长度;中文则为2
        System.out.println("length" + length);
        if(length == 1) {
          return str.substring(0 , max);
        }else{
          return str.substring(0 , max-1);
        }
      }
      

  8.   

    这个问题我在实际工作中遇到过,并不像大家想象的那么简单!(注意要求是最大 字节 数)    public static String getSubString(String str, int len) {
            if (str==null) return "";
            if (len<=0) return "";
            
            if (str.getBytes().length < len) {
                return str;
            }
            
            StringBuffer sb = new StringBuffer(str);
            sb.setLength(len);
            while(sb.toString().getBytes().length>len) {
                sb.deleteCharAt(sb.length() - 1);
            }        return sb.toString();
        }
      

  9.   

    jkit(不再灌水) 的方法有问题,当max为5时,遇到“中”的话,没有把留下lucumu(沸腾的咖啡) 的方法好象把中文字也按一个字节处理了吧?UTF888(UU) 的方法好象是正确的应该
      

  10.   

    我试过了, UTF888(UU)的方法最正确:)
    又学了一招
      

  11.   

    又看了一下不对,如果要求中文按两个字节考虑的话,恐怕就不能用substring了,它只会把中文按一个“位置”考虑还是应该把它放入数组依次计算
      

  12.   

    我仔细看了一下,是题目出的有问题,
    如果输入的字串为"我AC中国",最大字节为5,则应该输出为"我AC"。"中"不应该出来,如果带上"中",那么最大字节数就成了6了!
      

  13.   

    我写的程序,应该差不多了import java.io.*;
    import java.util.*;public class Substring{ public static void main(String[] args) throws IOException {

    System.out.print("Result:" + getSubString(args[0],Integer.parseInt(args[1])));
    } public static String getSubString(String str, int max) {
    char[] a = str.toCharArray();
    int i;

    for(i=0;i<a.length;i++)
    {
    if(max > 0)
    {
    if(a[i] > 255)
    max--;

    max--;
    }
    else
    break;
    }

    String aa = "";
    for(int j=0;j<i;j++)
    aa += a[j];

    return aa;
        }}
      

  14.   

    UTF888(UU) 没有考虑中间有汉字的情况jkit(不再灌水)和我的都会产生大量的垃圾gernett21(wolf)写的应该是可以的,但是最后两句
    for(int j=0;j<i;j++)
    aa += a[j];
    太影响效率了。不如用String(char[] value, int offset, int count) 直接构造
      

  15.   

    呵呵呵呵同意binny所说的
    不过应该是用String(byte[] bytes, int offset, int length, String charsetName) 吧。
      

  16.   

    刚才又想了另一种办法:    public static String getSubString(String str, int len) {
            if (str == null) return "";
            if (len <= 0) return "";
            
            byte[] bb = str.getBytes();
            if (bb.length < len) {
                return str;
            }        String result = new String(bb, 0, len);
            if ("".equals(result)) {
                result = new String(bb, 0, len+1);
            }        return result;
        }
      

  17.   

    好像都不行吧,str.toCharArray()得到的数组,有几个汉字会得到多长的数组。而不是把一个汉字分成两个来字符吧。
      

  18.   

    写了一个简单的方法
    public class StringToBytesTest 
    {
    StringToBytesTest(String strTest,int n){
    byte[] b=strTest.getBytes();
    if(b[n]<0){
    n+=1;
    }
    System.out.println(new String(b,0,n));

    }
    public static void main(String[] args) 
    {
    StringToBytesTest bt=new StringToBytesTest("我爱china",3);
    }
    }
      

  19.   

    UTF888(UU) 的方法有一点不全:当max=1时就不对了,max=3和max=4的结果一样,解决办法还不太清楚。
      

  20.   

    不知道大家都在说什么,一个一个真他妈能装高手!我刚刚写程序跑了一下。java里,substring函数根本就不必考虑中文双字节的问题啊!!!!谁能用这个截出半个汉字我倒要看看。。一群白痴!!!!
      

  21.   

    不知道大家都在说什么,一个一个真他妈能装高手!我刚刚写程序跑了一下。java里,substring函数根本就不必考虑中文双字节的问题啊!!!!谁能用这个截出半个汉字我倒要看看。。一群白痴!!!!
      

  22.   

    loveyousomuch(★Allen★) 的方法是对的!
      

  23.   

    baigy(毛毛虫) 的观点是对的,
    java中的字符(char)是unicode字符,所以都是16位的,英文字母也不例外,
    所以根本就不存在能把双字节字符被截断的问题