java中如何计算一个字符串的byte长度。中文及其符号占2个byte,英文1个。请知道的朋友写个通用1.4和1.6的,并且不受运行系统的中英文环境的代码。
我记得好像1.4的char存储时,英文占位符的0在后,而1.6的char,英文占位符0在前。
并且不要用getByte()方法,因为依赖操作系统的编码格式。

解决方案 »

  1.   

    中文并不一定是占两个字节的,具体占多少字节是跟具体的编码方式相关的。
    比如说:GB2312、GBK、GB18030 编码是占用两个字节的,但是 UTF-8 编码的话至少需要占用三个字节。因此你的问题无法回复!
      

  2.   

    那怎么办。我需要判断一个字符串的字节长度。是这样的,这个字符串需要存到数据库中,为了防止超长,我需要判断一下。但我不能规定甲方的jdk版本、操作系统、web容器,并且数据库和应用服务器不再一台机器上,所以需要一个通用版。没想出来有啥方法。
      

  3.   

    还以为沙发,没想到板凳都没有坐上,不会java存帮小巷顶
      

  4.   

    有一个简单方法,就是把大于 0xff 的字符都作为两个字符(当然是在 GBK 环境下)public static int count(String str) {
        if(str == null || str.length == 0) {
            return 0;
        }
        int count = 0;
        char[] chs = str.toCharArray();
        for(int i = 0; i < chs.length; i++) {
            count += (chs[i] > 0xff) ? 2 : 1;
        }
        return count;
    }或者你直接使用  int len = str.getBytes("gbk");
      

  5.   

    上面代码假设你的数据库编码格式是 GBK 的,而不是 UTF-8 的,如果是 UTF-8 的话,上面的代码无效!
      

  6.   

    <script type="text/javascript"><!--
    function check(){
           var str = document.getElementById("test").value;
           if(str.length < 5){
               update("至少输入5个字符!");
           }else if(str.length > 10){
               update("不能超过10个字符!");
               str = str.substring(0,10);               
               document.getElementById("test").value = str.substring(0,10);
           }else{
               update("有效的用户名。")
           }
    }
    function update(word){
           document.getElementById("feedback").innerHTML = word;
    }
    </script><p>  <label for="test">帐号:</label>  
    <input type="text" name="test" id="test" onkeypress="check()" maxlength="15" />  <span id="feedback"></span></p>
      

  7.   

    第一,js长度判断也是字符个数,和java的String.length()一样
    第二,这不是页面输入内容,直接从excel导进去的,我想尽量不要靠异常来记录出错信息。
      

  8.   

    算了,为了兼容各种编码格式,我打算一律按照*4byte(无论中英文)长度判断,数据库相应字段长度*2吧。即便浪费长度,也无所谓了,还好该表总记录数不会超过1万,某几个字段长度增长一倍也不会造成效率大影响,而且不考虑并发。
    本人惭愧,从来没写过防止数据库超长插入的程序判断,这次突然想严谨风格、通用程序。结果修炼不够。哎,谁有好例子请在java版发一下吧。我这里用笨招儿了。
      

  9.   

    java上似乎没有判断变量或对象占用内存大小的方法..
    计算长度的话还是可以用getBytes(Charset charset) 
    java机上的字符串都是UTF-16,不管英文还是汉字都每个占两字节
    本地操作系统编码格式可以用Charset.defaultCharset()得到.
    数据库的编码格式就只有看你用的什么数据库来判断他的编码格式了.