見たことがあると思いますString.format
以前は次のように使用しました:
String.format("Some {1}, {2}, {3}", var1, var2, var3);
これは誰かのために鐘を鳴らしますか?多分私はC#を考えています、Javaで同じことを達成する方法はありますか?
私はあなたが次のようなことをできることを知っています:
String.format("Some %s, %d, %s", aString, aNumber, aString)
しかし、私が求めている構文は前者のものです...
あなたが探しているのは MessageFormat
です。これは、指定された形式と入力パラメーターを使用します。
MessageFormat.format("Some {0}, {1}, {2}", var1, var2, var3);
そしてすでに述べたように、 String.format
でも代替構文を使用してジョブを実行できますが、機能的にはそれほど強力ではなく、要求したものとは異なります。
はい、それは典型的な formatC#の文字列です。 Javaでは、後者、つまりString.format("%s %d %d", ...)
を使用できます。
alternativeはMessageFormat.format("Some {0}, {1}, {2}", var1, var2, var3)
を使用することです。これは、@ Tobiasによって言及されているように、。インポートするには Java.text.MessageFormat
。また、ローカライズされたリソースを扱う場合にも適しています。通常、外部の.properties
ファイルにError {0} ocurred due to {1}
形式のメッセージが含まれます。
パラメータのインデックスとそのタイプの両方を指定するのは好きではありません-主に例外をスローしてメッセージを準備するときです。私はSLF4jがそれを行う方法が好きです。だから私はorg.slf4j.helpers.MessageFormatterを次のようにラップしました:
public static String subst(String string, Object...objects) {
return MessageFormatter.arrayFormat(string, objects).getMessage();
}
その後、次のように使用できます。
public void main(String[] args) {
throw new RuntimeException(MyUtils.subst("Problem with A={} and B={}!", a, b));
}