Java - Variablen in Strings einschließen?

114

Ok, wir sollten alle wissen, dass Sie Variablen in Zeichenfolgen einfügen können, indem Sie Folgendes tun:

String string = "A string " + aVariable;

Gibt es eine Möglichkeit, dies so zu tun:

String string = "A string {aVariable}";

Mit anderen Worten: Ohne die Anführungszeichen schließen und Pluszeichen hinzufügen zu müssen. Es ist sehr unattraktiv.

Gray Adams
quelle
10
@Chandra Bitte frag nicht warum, sondern erkläre wenn möglich. Es ist nur so, wie ich es vorziehen würde. Vielen Dank.
Gray Adams
3
Verwenden Sie Groovy, dann können Sie "A string $ {aVariable}" tun, was Sie wollen.
Kaleb Brasee
2
Es gibt eine ganze Reihe von Techniken für ähnliche Dinge, die in dieser Frage diskutiert werden , die jedoch String.format()in die Sprache integriert sind.
ig0774
@KalebBrasee Das klingt perfekt, aber ich zögere immer, wenn es darum geht, Sprachen zu ändern. Ich möchte mich nicht zurücksetzen.
Gray Adams
1
@GrayAdams Groovy setzt dich nicht zurück, es befreit dich! : D
Kaleb Brasee

Antworten:

122

Sie können immer String.format (....) verwenden. dh

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

Ich bin mir nicht sicher, ob das für Sie attraktiv genug ist, aber es kann sehr praktisch sein. Die Syntax ist dieselbe wie für printf und java.util.Formatter. Ich habe es besonders oft verwendet, wenn ich tabellarische numerische Daten anzeigen möchte.

Luftkissenfahrzeug voller Aale
quelle
2
Ich weiß, dass dies Ansichtssache ist, aber ich sehe nicht, wie formatattraktiver es ist als ein einfacher String-Verkettungsausdruck. Das Besondere formatist, wenn Sie Auffüllen, Formatieren von Zahlen usw. durchführen müssen.
Stephen C
1
@ StephenC: Ich stimme dir überhaupt nicht zu. Es ist jedoch eine nützliche Alternative für die Formatierung von Zeichenfolgen, insbesondere wenn Sie das Auffüllen wie oben und wie oben beschrieben durchführen müssen (dh tabellarische numerische Daten anzeigen müssen). Ich habe es ziemlich oft zum Formatieren von Blutchemie- und CBC-Ergebnisberichten verwendet.
Luftkissenfahrzeug voller Aale
@StephenC Ich mag das Format aus mehreren Gründen: Zunächst verwendet '% d' das Plattformzeilentrennzeichen. Zweitens können Sie am Ende leicht alle Variablen finden. Sie können die eingegebenen Variablen einfach neu formatieren oder sogar neu anordnen. Es ist einfacher, Fehler (wie 1 + "oops") zu vermeiden , insbesondere wenn Sie FindBugs verwenden (die Formatzeichenfolgen und Eingabeparameter analysieren). Und wie der Fragesteller sagt, ist es in vielen Fällen besser lesbar. Natürlich ist es eine Schande, dass die formatMethode statisch gemacht wurde, das war ein ziemlich dummer Designfehler.
Maarten Bodewes
@owlstead - "Natürlich ist es eine Schande, dass die Formatierungsmethode statisch gemacht wurde, das war ein ziemlich dummer Designfehler." . Huh? Wie würde formatsich das auf die Zielzeichenfolge beziehen? Sicherlich schlagen Sie nicht vor, dass von uns erwartet werden sollte, dass wir schreiben "A String %s %2d".format(aStringVar, anIntVar)... oder?
Stephen C
1
@owlstead - "asFormat" wäre nicht richtig. Dies bedeutet, dass die Methode ein Formatobjekt erstellt und zurückgibt.
Stephen C
70

Dies wird als String-Interpolation bezeichnet. es existiert nicht als solches in Java.

Ein Ansatz ist die Verwendung von String.format:

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

Ein anderer Ansatz ist die Verwendung einer Vorlagenbibliothek wie Velocity oder FreeMarker .

Jacob Mattison
quelle
38

Berücksichtigen Sie auch java.text.MessageFormat, dass eine verwandte Syntax mit numerischen Argumentindizes verwendet wird. Beispielsweise,

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

führt dazu string, dass Folgendes enthalten ist:

A string of ponies.

Üblicherweise wird die Klasse für ihre numerische und zeitliche Formatierung verwendet. Ein Beispiel für die JFreeChartFormatierung von Etiketten wird hier beschrieben . Die Klasse RCInfoformatiert den Statusbereich eines Spiels.

Müllgott
quelle
1
Für jemanden, der von CSharp kommt, ist dieser Weg einfacher, da er string.Format in C # ähnelt.
Mojtaba
0

Sie können das String-Format verwenden, um Variablen in Strings einzuschließen

Ich benutze diesen Code, um 2 Variablen in die Zeichenfolge aufzunehmen:

String myString = String.format ("Dies ist mein String% s% 2d", variable1Name, variable2Name);

Alinn
quelle