68

私は次のことを達成するために何かを探しています:

String s = "hello {}!";
s = generate(s, new Object[]{ "world" });
assertEquals(s, "hello world!"); // should be true

私はそれを自分で書くことができましたが、これを行うライブラリを一度見たように思えます。おそらくそれは slf4j ロガーでしたが、ログメッセージを書きたくありません。文字列を生成したいだけです。

これを行うライブラリについて知っていますか?

4

10 に答える 10

85

String.formatメソッドを参照してください。

String s = "hello %s!";
s = String.format(s, "world");
assertEquals(s, "hello world!"); // should be true
于 2013-06-28T12:23:52.150 に答える
37

StrSubstitutorApache Commons の Lang は、名前付きプレースホルダーを使用した文字列の書式設定に使用できます。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-text</artifactId>
    <version>1.1</version>
</dependency>

https://commons.apache.org/proper/commons-lang/javadocs/api-3.4/org/apache/commons/lang3/text/StrSubstitutor.html :

文字列内の変数を値で置き換えます。

このクラスは、テキストの一部を取り、その中のすべての変数を置き換えます。変数のデフォルトの定義は ${variableName} です。プレフィックスとサフィックスは、コンストラクターと set メソッドを介して変更できます。

変数値は通常、マップから解決されますが、システム プロパティから、またはカスタム変数リゾルバーを提供することによって解決することもできます。

例:

String template = "Hi ${name}! Your number is ${number}";

Map<String, String> data = new HashMap<String, String>();
data.put("name", "John");
data.put("number", "1");

String formattedString = StrSubstitutor.replace(template, data);
于 2016-10-05T12:41:02.967 に答える
11

プレースホルダーの形式を変更できる場合は、String.format(). そうでない場合は、前処理として置き換えることもできます。

String.format("hello %s!", "world");

詳細については、この別のスレッドを参照してください。

于 2013-06-28T12:23:01.407 に答える
9

There are two solutions:

Formatter is more recent even though it takes over printf() which is 40 years old...

Your placeholder as you currently define it is one MessageFormat can use, but why use an antique technique? ;) Use Formatter.

There is all the more reason to use Formatter that you don't need to escape single quotes! MessageFormat requires you to do so. Also, Formatter has a shortcut via String.format() to generate strings, and PrintWriters have .printf() (that includes System.out and System.err which are both PrintWriters by default)

于 2013-06-28T12:23:28.517 に答える
6

ライブラリは必要ありません。最近のバージョンの Java を使用している場合は、以下をご覧くださいString.format

String.format("Hello %s!", "world");
于 2013-06-28T12:23:41.513 に答える
5

If you can tolerate a different kind of placeholder (i.e. %s in place of {}) you can use String.format method for that:

String s = "hello %s!";
s = String.format(s, "world" );
assertEquals(s, "hello world!"); // true
于 2013-06-28T12:23:20.137 に答える
0

https://stackoverflow.com/users/4290127/himanshu-chaudharyによる提案は非常にうまく機能します。

String str = "Hello this is {} string {}";     
str = MessageFormatter.format(str, "hello", "world").getMessage();
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.8.0-beta4</version>
</dependency>
于 2021-12-01T05:22:03.337 に答える