it-swarm.com.de

Java Strings mit Platzhaltern erzeugen

Ich suche nach etwas, um Folgendes zu erreichen:

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

Ich könnte es selbst schreiben, aber es scheint mir, dass ich einmal eine Bibliothek gesehen habe, die dies getan hat, wahrscheinlich war es der slf4j-Logger, aber ich möchte keine Logmeldungen schreiben. Ich möchte nur Strings generieren.

Kennen Sie eine Bibliothek, die dies tut?

38
ndrizza

Sehen String.format Methode.

String s = "hello %s!";
s = String.format(s, "world");
assertEquals(s, "hello world!"); // should be true
53
Grzegorz Żur

StrSubstitutor von Apache Commons Lang kann für die Formatierung von Zeichenfolgen mit benannten Platzhaltern verwendet werden:

<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 :

Ersetzt Variablen innerhalb eines Strings durch Werte.

Diese Klasse nimmt einen Text und ersetzt alle darin enthaltenen Variablen. Die Standarddefinition einer Variablen lautet $ {variableName}. Präfix und Suffix können über Konstruktoren und Set-Methoden geändert werden.

Variablenwerte werden normalerweise von einer Karte aufgelöst, können aber auch von Systemeigenschaften oder durch die Bereitstellung eines benutzerdefinierten Variablenauflösers aufgelöst werden.

Beispiel:

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);
26
Justas

Es gibt zwei Lösungen:

Formatter ist neuer, obwohl es printf() übernimmt, das 40 Jahre alt ist ...

Ihr Platzhalter, wie Sie ihn derzeit definieren, ist einer, den MessageFormat verwenden kann, aber warum sollten Sie eine antike Technik verwenden? ;) Benutze Formatter.

Es gibt umso mehr Gründe, Formatter zu verwenden, als dass Sie einfache Anführungszeichen nicht umgehen müssen! MessageFormat fordert Sie dazu auf. Außerdem hat Formatter eine Verknüpfung über String.format(), um Zeichenfolgen zu generieren, und PrintWriters haben .printf() (das beinhaltet System.out und System.err, die standardmäßig beide PrintWriters sind)

8
fge

Wenn Sie das Format Ihres Platzhalters ändern können, können Sie String.format() verwenden. Wenn nicht, können Sie es auch als Vorverarbeitung ersetzen.

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

Weitere Informationen in dieser andere Thread .

7
LaurentG

Sie brauchen keine Bibliothek. Wenn Sie eine neuere Java-Version verwenden, schauen Sie sich String.format an:

String.format("Hello %s!", "world");
5
codebox

Wenn Sie einen anderen Platzhaltertyp tolerieren können (d. H. %s anstelle von {}) können Sie String.format Methode dafür:

String s = "hello %s!";
s = String.format(s, "world" );
assertEquals(s, "hello world!"); // true
2
dasblinkenlight