2011-12-31 7 views
4

javaのさまざまなフォーマット方法がどのように関連しているかを簡単に理解する方法はありますか?私は次のことを混乱します:Javaの文字列/数値/通貨フォーマット機能

System.out.printf() 
System.out.format() 
String.format() 
System.console.format() 
new Formatter(new StringBuffer("Test")).format(); 
DecimalFormat.format(value); 
NumberFormat.format(value); 

とにかく上記のクラス/メソッドは関係していますか?違いを理解し、どの状況で使用するのが最適な方法は何ですか?

例として、System.out.printf,System.out.formatおよびString.formatはすべて同じ構文およびフォーマットフラグを使用します。私はそれらの3つすべてに違いが何かを見ることができません。ご質問のすべてを簡単にソースやドキュメントを見て、答えることができるので、私はあなたの対応するJavaバージョンのJavadocとソースのjarファイルをダウンロードして検討する

おかげ

+1

「Formatter」機能を包み込む便利な方法です。 ( 'NumberFormat'とそのサブクラスがどのように関係しているのかは分かりません) –

+0

@Daveしかし、まだ' PrintStream.format'と 'PrintStream.printf' - afaik同じリリースで追加され、同じ機能を持っています。'printf(format、args)という形式のこのメソッドの呼び出しは、out.format(format、args)'の呼び出しとまったく同じように動作します。実際には奇妙なdublicationは – Voo

+0

@Voo誰かが 'print' /' println'などと並んで 'format'機能をもっと保つために' printf'を追加したと思いますが、それは単なる推測です。ほとんどのAPIは、さまざまな理由でさまざまな理由で重複しています。異なるスタイルを使用したり、インテントを異ならせたりします。 –

答えて

4

System.out.printf(formatString, args) 

System.outは、PrintStreamです。 PrintStream.printf(formatString, args)は、実際にはPrintStream.format(formatString, args);の便利なメソッド呼び出しです。

System.out.format(formatString, args) 

これは、結果をフォーマットし、PrintStreamにそれらを追加するFormatterを使用していますPrintStream.format(formatString, args)の呼び出しです。

String.format(formatString, args) 

この方法はまた、Formatterを使用して書式文字列と引数のフォーマットされた結果を使用して新しい文字列を返します。

System.console().format(formatString, args) 

System.console()Consoleです。 Console.format(format, args)Formatterを使用して、書式設定された文字列をコンソールに表示します。

new Formatter(new StringBuffer("Test")).format(formatString, args); 

これは、渡された文字列バッファを使用してFormatterのインスタンスを作成します。あなたは、この呼び出しを使用する場合は、あなたがFormatterによって書き込まAppendableを取得するためにout()メソッドを使用する必要があります。最後に

StringBuffer sb = new StringBuffer("Test"); 
new Formatter(sb).format(formatString, args); 
// now do something with sb.toString() 

:代わりにあなたのような何かをしたいかもしれません

DecimalFormat.format(value); 
NumberFormat.format(value); 

これらはないFormatterクラスを使用しない番号には2つの具象のフォーマッタです。 DecimalFormatNumerFormatは両方ともメソッドを持ち、doubleまたはNumberを取り、それらのクラスの定義に従って文字列として書式設定します。私が知る限り、Formatterはそれらを使用していません。

これが役に立ちます。

関連する問題