导给银行文件要求用txt文件, 每个字段都要宽度限制, 但导出后发现因为中文的问题,数据层次不齐.
该如何解决?

解决方案 »

  1.   

    ASCII码0-126的打印字符为单字节,此外的打印字符多为两字节(三字节的不太用)。
    String s="asdf你好qwer";
    int size=0;
    for(int i=0;i<s.lenght;i++){
    size++;
    int ii=(int)s.charAt(i);
    if(ii<=0||ii>=126) size++;//双字节字符
    }
    System.out.println("字符宽度为:"+size);如果不需要处理\r\n\t...的话,31-126就可以了。
      

  2.   

    这个方法改一下就行了/**
     * 计算字符串长度. 一个汉字的长度按2计算. 如果给定的字符串为null, 返回0.
     * 
     * @param str
     *            待计算长度的字符串
     * @return 字符串长度
     */
    public static int strlen(String str) {
    if (str == null || str.length() <= 0) {
    return 0;
    } int len = 0; char c;
    for (int i = str.length() - 1; i >= 0; i--) {
    c = str.charAt(i);
    if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z')
    || (c >= 'A' && c <= 'Z')) {
    //字母, 数字
    len++;
    } else {
    if (Character.isLetter(c)) { //中文
    len += 2;
    } else { //符号或控制字符
    len++;
    }
    }
    } return len;
    }
      

  3.   

    汉字在 Unicode 里面有单独的几块区域,是中日韩(朝鲜)共享的。
    以下两段
    U+4e00 ~ U+9FB0 原来 GB2312 和 GBK 中的汉字
    U+3400 ~ U+4DB6 包括 GB18030.2000 中那些增加的汉字是否可以逐个判断?!