2012-01-05 14 views
1

我寫一個程序和是卡在下述條件多個動態長度的字符串(右和左填充):串格式,在每個線

的輸出變爲固定格式文件

 Total 1     Total 2 
----------------   ---------------- 
     311,862.33     23,456.00 
     40,000.00    789,123.00 

如上例所示,數量字符串的長度不同。

要求是數量應該總是從「連字符」的末尾開始。

如何實現這一目標?

我知道,左,右墊的字符串可以通過被來達到的:

String.format("%1$#20s", "311,862.33"); 
String.format("%1$-15s", "12345"); 

但是,如何在我的情況下,實現哪裏有每行多個字符串和字符串長度是動態的?

在下面的代碼中找到哪些格式在單個列中佔多少。但是,如何實現多列的同一行中的多個數量?

String format = "%10.2f\n"; // width == 10 and 2 digits after the dot 
float [] floats = {123.45f, 99.0f, 23.2f, 45.0f}; 
for(int i=0; i<floats.length; i++) { 
    float value = floats[i]; 
    System.out.format(format, value); 
} 

這會給輸出:

123.45 
99.00 
23.20 
45.00 

感謝您的閱讀!

回答

0

它可以使用字符串格式方法很容易做到:

String amount1 = "311,862.33"; 
String amount2 = "45,678.22"; 
String content = String.format("%26s", amount1) + String.format("%20s", amount2); 

這會給輸出正是我想要的。

1

我會使用一個StringBuilder並通過跟蹤計數器中的行長度來填充自己。

這不是最快或簡潔的方法,但它確實提供了更好的可讀性和透明度。如果代碼路徑很熱,JIT可能會優化這類指令。

1

試試這個:

try { 
     String formatCol1 = "%10.2f"; // width == 10 and 2 digits after the dot 
     String formatCol2 = "%15.2f"; // adjust width to control space between columns 

     float[] floats1 = {123.45f, 99.0f, 23.2f, 45.0f}; 
     float[] floats2 = {12345.67f, 999.90f, 2345.32f, 12.0f}; 
     for (int i=0; i<floats1.length; i++) { 
      float value1 = floats1[i]; 
      float value2 = floats2[i]; 

      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      PrintStream printStream = new PrintStream(baos); 
      printStream.format(formatCol1, value1); 
      printStream.format(formatCol2, value2); 

      System.out.println(baos.toString("utf8")); 
     } 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } 

輸出是:

123.45  12345.67 
99.00   999.90 
23.20  2345.32 
45.00   12.00