2012-01-05 15 views
1

私はプログラムを書いていますし、次の要件で立ち往生しています:文字列(左右のパディング)

出力が固定形式のファイルに

 Total 1     Total 2 
----------------   ---------------- 
     311,862.33     23,456.00 
     40,000.00    789,123.00 
を行きます

上記の例のように、量文字列の長さは異なります。

要件は、「ハイフン」の末尾から始める必要があります。

これを行うには?

私は文字列に右と左のパッドを通じacheivedすることができることを知っている:

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 
関連する問題