如果我想把一个为汉字的字符串的的长度(写入文件后所占的字节数)增加到某个固定值该怎么办?
比如说:
   String str="大家好";
   我想把一排str这样的字符串写入txt文件后让他占10个字节整齐排列。
  我像下面这样写这样为什么不行?
byte[] st=str.getBytes("ISO-8859-1");
             if(hm.length<24)
              {
               for(int i=hm.length;i<10;i++)
               {
               heming=heming+" ";
               }
             }
             bw.write(heming);
或者说你可以直接告诉我,怎么让下面这些写入文件的数据真气的排列,让每一列的前面都对齐?                 请高手指点!
白降河                     白沙                41653600 342300.0 1123200.0
白降河                     刘瑶水库              41603050 342200.0 1124000.0
白降河                     江左                41653000 342400.0 1121400.0
白降河                     吕店                41653400 342700.0 1123800.0
亳清河                     王茅                41421750 351000.0 1114800.0
亳清河                     长直                41421600 351300.0 1114400.0
亳清河                     皋落                41421550 350500.0 1112400.0
长河                      东沟                41733200 353600.0 1121900.0
长河                      柳树底               41733000 353700.0 1124500.0
   

解决方案 »

  1.   

    public class Test {    public static void main(String args[]) {
            String str = "大家好";
            Test t = new Test();
            System.out.println(t.leftString(str, 10) + "|");
            System.out.println("12345678901234567890");
        }    /**
         * 左对齐
          * @param str 字符串
          * @param total 占的半角宽度
          * @return 后置空格的字符串
          */    
        public String leftString(String str, int totalLen) {
            int len = getAsciiLength(str);
            int diff = totalLen - len;
            String space = diff > 0 ? generateManyChar(' ', diff) : "";
            return str + space;
        }
        
        /**
         * 右对齐
          * @param str 字符串
          * @param total 占的半角宽度
          * @return 前置空格的字符串
          */
        public String rightString(String str, int totalLen) {
            int len = getAsciiLength(str);
            int diff = totalLen - len;
            String space = diff > 0 ? generateManyChar(' ', diff) : "";
            return space + str;
        }    /**
         * 生成多个字符
          * @param c 需要生成的字符
          * @param length 字符的个数
          * @return length 个字符组成的字符串
          */
        private String generateManyChar(char c, int length) {
            StringBuffer sb = new StringBuffer();
            for(int i = 0; i < length; i++) {
                sb.append(c);
            }
            return sb.toString();
        }           /**
         * 获得一个字符串的长度,汉字算两个长度
          * @param str
         * @return 字符串的长度
          */
        private int getAsciiLength(String str) {
            int length = 0;
            char[] c = str.toCharArray();
            for(int i = 0, k = c.length; i < k; i++) {
                if(c[i] <= 0xff) {
                    length++;
                }else{                
                    length += 2;
                }
            }        
            return length;
        }
    }
      

  2.   


    printf 不行,汉字还是占据 %s 中 1 个字符的位置,并不是两个,这样还是对不齐的。
      

  3.   

    哈 不过针对楼主这题可以偷点懒import java.io.*;
    public class Test {
        public static void main(String args[])throws Exception{
         Scanner s=new Scanner(new File("c:\\in.txt"));
    PrintWriter out=new PrintWriter(new File("c:\\out.txt")); 
    int i=0,len;
    String str;
         while(s.hasNext()){
         if(++i%5<3){
         str=s.next();
         len=str.length();
         out.printf("%-"+(10-len)+"s", str);
         }else{
         out.printf("%-10s", s.next());
         }
         if(i%5==0)
         out.println();
         }
         s.close();
         out.close();   
        }
    } in.txt:
    白降河                     白沙                41653600 342300.0 1123200.0 
    白降河                     刘瑶水库              41603050 342200.0 1124000.0 
    白降河                     江左                41653000 342400.0 1121400.0 
    白降河                     吕店                41653400 342700.0 1123800.0 
    亳清河                     王茅                41421750 351000.0 1114800.0 
    亳清河                     长直                41421600 351300.0 1114400.0 
    亳清河                     皋落                41421550 350500.0 1112400.0 
    长河                      东沟                41733200 353600.0 1121900.0 
    长河                      柳树底               41733000 353700.0 1124500.0 out.txt
    白降河    白沙      41653600  342300.0  1123200.0
    白降河    刘瑶水库  41603050  342200.0  1124000.0
    白降河    江左      41653000  342400.0  1121400.0
    白降河    吕店      41653400  342700.0  1123800.0
    亳清河    王茅      41421750  351000.0  1114800.0
    亳清河    长直      41421600  351300.0  1114400.0
    亳清河    皋落      41421550  350500.0  1112400.0
    长河      东沟      41733200  353600.0  1121900.0
    长河      柳树底    41733000  353700.0  1124500.0