搂主:在string字串一个中汉字、中文标点只占一位,全角输入的字符或阿拉伯数字也占一位,但将它转化为字节却占两位(即两个字节),如果你想确定你的字符串str是否含有英文(除1、2、3...9、0)以外的编码字符或用全角输入法输入的英文字母和阿拉伯数字,你可用将str字串转化为字节数组(Byte[]),然后比较一下转化前后length的大小;如果buf.length>str.length则说明你的字串可能含有全角输入法输入的字符(包括阿拉伯数字)或中文(包扩中文标点),但不能确定

解决方案 »

  1.   

    用java写的代码都是跨平台的,不需要担心平台问题
      

  2.   

    你用一下substring(?,?)和getBytes()看一下结果就知道了
      

  3.   

    /**
       * 字符串定长截断函数。
       * @param text 需要截断的字符串
       * @param textMaxChar 需要留下的长度
       * @author [email protected]   
       * @return
       */
      public String[] CutString(String text, int textMaxChar)
      {
        int size, index;
        String[] returnStringArray = new String[2];    if(textMaxChar <= 0){
          returnStringArray[0] = text;
          returnStringArray[1] = null;
        }
        else{
          for(size = 0, index = 0; index < text.length() && size < textMaxChar;
              index++){
            size += text.substring(index, index + 1).getBytes().length;
          }
          returnStringArray[0] = text.substring(0, index);
          returnStringArray[1] = text.substring(index);
        }    return returnStringArray;
      }
      

  4.   


    也就是一个字符串str,我想得到str.substring(0, 10); 只要不将汉字截成两半就可以了!
    附加:能跨平台,在windows、linux7.3、linux9.0上都可以通过

    不清楚楼主问这个问题的做了多少Java的东西,或者说对Java掌握多少。
    在JAVA中
    String是如何定义的?
    Char是如何定义的?
    所有这些天生就是UNICODE的,怎么会出现汉字被截成两半的现象?
    况且,你仅仅是用一个substring方法而以。。如果谁用这个方法能够做到将汉字截成两半,那才是当真的了不起了
      

  5.   

    str.substring(0, 10)这种方法永远不会出错!!!!str.getBytes()有可能!!!
      

  6.   

    同意楼上的看法
    substring方法是不会把汉字截成两半的,因为java用的是UNICODE
      

  7.   

    同意楼上的楼上
    在java 中用的是UNICODE汉字和字母是一样的
    class a{
     public static void main(String[] args)[
        String n="我和ni";
        String m=n.substring(0,3);
        System.out.println("m == "+ m);
     }
    }
    结果为m == 我和n;
    java的优点就是跨平台,这点不用超心
      

  8.   

    楼上各位:
    你们所讲的方法包括Str.getBytes(),这些我都试过了,不行,在window2k和linux7.3下来出来的结果是不一样的
    包括所说的str.substring(),也是会出现乱码的,就是最后一个字符可能会出现乱码=======================我想这应该和系统默认的编码方式有关:
    ngqzmjmj(冷酷)  应该是在window上面运行的
    dyroro(粗线条) java默认的应该是iso8859-1,如果系统是redhat9.0,可能你的程序会出问题
    niko7(掠水无痕) 在不同的平台下String.getBytes().length出来的结果是完全不一样的
      

  9.   

    .substring()不会有问题的
    我现在做的就是在windows下开发
    但运行是在Unix下,完全没有问题,substring()这种函数都有用到
      

  10.   

    楼上:
    请您用locale在您的unix上看一下你的默认编码是iso885915还是gb13030再问一下,你的windows和Unix下的字符截取结果一样吧吗??