String str = str.substring(0,10);
看看行不行!

解决方案 »

  1.   

    谢谢楼上的,这样做是不行的,因为java把中文字符和英文字符都同样当作是一个字符长度了,而不是把两个英文字符当成是一个字符长度。
      

  2.   

    那你把它转换成byte[],字节型的,看看按字节取怎么样?
      

  3.   

    String s = "中aaaa华人民共和国"
    byte[] bytes = s.getBytes();
    String newS = new String( bytes, 0, 10 );
    这样可以简单的获得
    中aaaa华人
    这样的String不过有个问题就是
    如果你的中文之中的英文是单数个的话,那么可能有问题
    比如
    String s = "中aaa华人民共和国"
    这样按照上面来截取的话
    就会有问题了所以可能要自己一个一个分别处理中文和英文
      

  4.   

    getBytes();方法取得byte后,留前面的10位就是
      

  5.   

    rr1.getBytes("utf-8")
    转换称byte。其中中文占三个字节。英文占2个字节。
      

  6.   

    to XKP(低等下人) 
    我就是这么做的,确实遇到了那个单数个的问题,可是怎么“自己一个一个分别处理中文和英文”啊
      

  7.   

    这样搞在对中英混合字符串作取长度或截取的动作时:
    s = new String(s.getBytes("ISO8859-1"), "GB2312");
    用substring截取之后,再转回去
    s = new String(s.getBytes("GB2312"), "ISO8859-1");但有一点,不同的字体时,并不是两个英文一个中文的宽度
      

  8.   

    这样搞在对中英混合字符串作取长度或截取的动作时:
    s = new String(s.getBytes("ISO8859-1"), "GB2312");
    用substring截取之后,再转回去
    s = new String(s.getBytes("GB2312"), "ISO8859-1");但有一点,不同的字体时,并不是两个英文一个中文的宽度
      

  9.   

    我所谓的
    自己一个一个分别处理中文和英文
    实在不是什么好办法
    就是
    每次subString一个,然后判断是不是中文
    如果是中文算两个
    如果是英文算一个
    ·············
    然后到了第九个byte的时候再判断后面的是不是中文·····我觉得这个办法很笨,唉······
      

  10.   

    这样做吧,看看行不?public class kk{
      public static void main( String[] args ){
    String s = "中aaa华人民共和国";
    byte[] bytes = s.getBytes();;
    String newS = new String( bytes, 0, 10 );
    if( newS.trim().equals( "" )){
      newS = new String( bytes, 0, 9 );
    }
    System.out.println( newS );
      }
    }
      

  11.   

    楼上的,记得要判bytes.length >= 10哦,还有就是为什么要判newS.trim().equals( "" )的情况呢?
      

  12.   

    谢谢XKP(低等下人),用您的方法问题已经解决了,可是又发现了一个问题,请赐教
    例如一个字符串“aa中华人民共和国”我怎么样才能取得其length是8,而不是9呢?
    谢谢您了!!!!
      

  13.   

    such a easy thing
    public class c{
    //cheat chinese as two char.you can replace "c < 256" to check the char youself 
    static String sbustring2(String org,int beginIndex, int endIndex){
    int offset=0;
    StringBuffer sbf=new StringBuffer();
    for(int i=0;i<org.length();i++){
    char c=org.charAt(i);
    if (offset >endIndex)break;
    if (offset >=beginIndex)sbf.append(c);
    offset+= c<256?1:2;
    //System.out.println(c+" "+offset);
    }
    return new String(sbf);
    }public static void main(String[] as){
    String a="中华人民共和国";
    String b="aaaaaaaaaaaaaa";
    String c="中aaaa华人民共和国";
    System.out.println(sbustring2(a,0,9));
    System.out.println(sbustring2(b,0,9));
    System.out.println(sbustring2(c,0,9));
    }
    }
    }
    return new String(sbf);
    }
      

  14.   


    public class kk{
      public static void main( String[] args ){
        String s = "aa中华人民共和国";
        double lengthCount = 0.0;
        for( int i = 0; i < s.length(); i++ ){
          char c = s.charAt( i );
          if( c < 256 ){
            lengthCount += 0.5;
          } else{
            lengthCount += 1.0;
          }
        }
        System.out.println( Math.round( lengthCount ) );
      }
    }