Java-文字列内に変数を含めますか?


114

では、次のようにして変数を文字列に含めることができることをすべて知っておく必要があります。

String string = "A string " + aVariable;

次のようにする方法はありますか?

String string = "A string {aVariable}";

つまり、引用符を閉じたり、プラス記号を追加したりする必要はありません。それは非常に魅力的ではありません。


10
@チャンドラ理由を聞かないでください。可能であれば説明してください。それは私がそれをしたい方法です。ありがとう。
グレイアダムス

3
Groovyを使用すると、「文字列$ {aVariable}」を必要なだけ実行できます。
Kaleb Brasee 2012年

2
この質問String.format()は、似たようなことについてさまざまな手法がありますが、言語に組み込まれています。
ig0774 2012年

@KalebBraseeそれは完璧に聞こえますが、言語の変更に関しては常に躊躇しています。後戻りしたくありません。
グレイアダムス

1
@GrayAdams Groovyはあなたを後退させません、それはあなたを自由にします!:D
Kaleb Brasee 2012年

回答:


123

いつでもString.format(....)を使用できます。つまり、

String string = String.format("A String %s %2d", aStringVar, anIntVar);

それがあなたにとって十分魅力的であるかどうかはわかりませんが、非常に便利です。構文は、printfおよびjava.util.Formatterの場合と同じです。特に表形式の数値データを表示する場合は、これをよく使用しました。


2
これは意見の問題であることはわかっていますformatが、単純な文字列連結式よりも魅力的であるとは思いません。どこにformatあなたがエトセトラパディング、数値のフォーマットを、行うために必要がある場合、独自にされています。
スティーブンC

1
@StephenC:私はあなたにまったく反対しません。しかし、これは特に、あなたが言ったり、私が言ったように(つまり、表形式の数値データを表示するために)パディングを行う必要がある場合に、文字列フォーマットの便利な代替手段です。私はそれを血液化学とCBC結果レポートのフォーマットにかなり使用しました。
ホバークラフトいっぱいのウナギ

@StephenCいくつかの理由でフォーマットが好きです。まず、「%d」はプラットフォームの行区切り文字を使用します。次に、最後にすべての変数を簡単に見つけることができます。入力した変数は簡単に再フォーマットしたり、並べ替えたりできます。1 + "oops"特に(フォーマット文字列と入力パラメーターを解析する)FindBugsを使用する場合は、間違いを()などを回避する方が簡単です。そして、質問者が言うように、多くの場合それはより読みやすいです。もちろん、formatメソッドが静的になったのは残念です。これは、かなり愚かな設計ミスでした。
Maarten Bodewes 2012年

@owlstead- 「もちろん、フォーマットメソッドが静的になったのは残念です。これはかなり愚かな設計ミスでした。」。えっ?formatターゲット文字列とどのように関連しますか?きっとあなたは私たちが書くことを期待されるべきだと示唆していません"A String %s %2d".format(aStringVar, anIntVar)...あなたはどうですか?
スティーブンC

1
@owlstead-"asFormat"は正しくありません。これは、メソッドがフォーマットオブジェクトを作成して返すことを意味します。
スティーブンC

70

これは文字列補間と呼ばれます。それ自体はJavaには存在しません。

1つの方法は、String.formatを使用することです。

String string = String.format("A string %s", aVariable);

別のアプローチは、VelocityFreeMarkerなどのテンプレートライブラリを使用することです。


38

java.text.MessageFormat数値引数インデックスを持つ関連構文を使用するも検討してください。例えば、

String aVariable = "of ponies";
String string = MessageFormat.format("A string {0}.", aVariable);

結果stringは以下を含みます:

A string of ponies.

より一般的には、クラスは数値および時間のフォーマットに使用されます。JFreeChartラベルのフォーマットの例をここで説明します。クラスRCInfoはゲームのステータスペインをフォーマットします。


1
CSharpから来る人にとって、この方法はC#のstring.Formatに似ているため、より簡単です。
Mojtaba

0

文字列形式を使用して、文字列内に変数を含めることができます

このコードを使用して、文字列に2つの変数を含めます。

String myString = String.format( "this is my string%s%2d"、variable1Name、variable2Name);

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.