我的一个程序中需要统计字符串长度,但string中把汉字作为一个字符,我需要按2个字符来计算长度,如何实现好?
如:"dfs中"为5个字符

解决方案 »

  1.   

    根据编码有关,最简单的:
    /**
         * 取得字符串的长度(按全角字符计算,如果是半角字符,则只占半个字符),取得的长度进行四舍五入。
         * @param 字符串
         * @return 全角长度
         */
        public static int lengthOfQuanJiao(String value) {
            if (value == null)
                return 0;        StringBuffer buff = new StringBuffer(value);
            float length = 0.0f;
            String stmp;
            for (int i = 0; i < buff.length(); i++) {
                stmp = buff.substring(i, i + 1);            try {
                    stmp = new String(stmp.getBytes("utf8"));
                } catch (Exception e) {            }
                
                if (stmp.getBytes().length > 1) {
                    length += 1;
                } else {
                    length += 0.5f;
                }
            }
            return Math.round(length);
        }这儿写你实际的编码,
    stmp = new String(stmp.getBytes("utf8"));
    实际应该做的话,是取bytes的unicode码,然后判断unicode是否在此范围内.
      

  2.   

    我试了stmp = new String(stmp.getBytes("GBK"));
    System.out.println(lengthOfQuanJiao("中国abc"));
    结果是
    4
    结果应为5啊.
      

  3.   

    上面错了.
    我试了stmp  =  new  String(stmp.getBytes("GBK"));  
    System.out.println(lengthOfQuanJiao("中国abc"));  
    结果是  
    4  
    结果应为7啊.
      

  4.   

    晕死。String str = "楼主真是伤脑筋12345."
    System.out.println(str.getBytes().length);
      

  5.   

    public static int lengthOfQuanJiao(String value) {
            if (value == null)
                return 0;        StringBuffer buff = new StringBuffer(value);
            int length = 0;
            String stmp;
            for (int i = 0; i < buff.length(); i++) {
                stmp = buff.substring(i, i + 1);            try {
                    stmp = new String(stmp.getBytes("utf8"));
                } catch (Exception e) {            }
                
                if (stmp.getBytes().length > 1) {
                    length += 2;
                } else {
                    length += 1;
                }
            }
            return length;
        }
      

  6.   

    我没任何转换怎么就把"ABC中"的长度计算成5了,你在什么程序里搞成4的
    转成 utf8 每个中文字算成四个字符