Java - Includere variabili all'interno di stringhe?


114

Ok, quindi dovremmo tutti sapere che puoi includere variabili nelle stringhe facendo:

String string = "A string " + aVariable;

C'è un modo per farlo come:

String string = "A string {aVariable}";

In altre parole: senza dover chiudere le virgolette e aggiungere segni più. È molto poco attraente.


10
@ Chandra Per favore, non chiedere perché, ma piuttosto spiega se possibile. È proprio come preferirei farlo. Grazie.
Gray Adams

3
Usa Groovy, quindi sarai in grado di fare "A string $ {aVariable}" tutto quello che vuoi.
Kaleb Brasee

2
C'è tutta una varietà di tecniche per cose simili discusse in questa domanda , ma String.format()sono integrate nel linguaggio.
ig0774

@KalebBrasee Sembra perfetto, ma sono sempre titubante quando si tratta di modificare le lingue. Non voglio tornare indietro.
Gray Adams

1
@GrayAdams Groovy non ti fa tornare indietro, ti rende libero! : D
Kaleb Brasee

Risposte:


124

Puoi sempre usare String.format (....). vale a dire,

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

Non sono sicuro che sia abbastanza attraente per te, ma può essere abbastanza utile. La sintassi è la stessa di printf e java.util.Formatter. L'ho usato molto soprattutto se voglio mostrare dati numerici tabulari.


2
So che è una questione di opinione, ma non vedo come formatsia più attraente di una semplice espressione di concatenazione di stringhe. Dove formatentra in gioco è quando è necessario eseguire il riempimento, la formattazione dei numeri, ecc.
Stephen C

1
@StephenC: Non sono affatto in disaccordo con te. Ma è un'alternativa utile per la formattazione delle stringhe specialmente quando è necessario eseguire il riempimento come dici tu e come ho detto sopra (cioè, per mostrare dati numerici tabulari). L'ho usato un bel po 'per la formattazione dei rapporti sull'analisi del sangue e sui risultati CBC.
Hovercraft Full Of Eels

@StephenC Mi piace il formato per alcuni motivi: prima di tutto, '% d' usa il delimitatore di riga della piattaforma. In secondo luogo, puoi facilmente trovare tutte le variabili alla fine. Puoi facilmente riformattare o persino riordinare le variabili che inserisci. È più facile evitare errori (come 1 + "oops"), soprattutto se si utilizza FindBugs (che analizza le stringhe di formato ei parametri di input). E, come dice il richiedente, in molti casi è più leggibile. Ovviamente è un peccato che il formatmetodo sia stato reso statico, è stato un errore di progettazione piuttosto stupido.
Maarten Bodewes

@owlstead - "Naturalmente, è un peccato che il metodo di formattazione sia stato reso statico, è stato un errore di progettazione piuttosto stupido." . Eh? Come si formatrelazionerebbe alla stringa di destinazione? Sicuramente non stai suggerendo che dovremmo aspettarci di scrivere "A String %s %2d".format(aStringVar, anIntVar)... vero?
Stephen C

1
@owlstead - "asFormat" non sarebbe corretto. Implica che il metodo crei e restituisca un oggetto formato.
Stephen C

70

Questa è chiamata interpolazione di stringhe; non esiste come tale in Java.

Un approccio consiste nell'usare String.format:

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

Un altro approccio consiste nell'utilizzare una libreria di modelli come Velocity o FreeMarker .


38

Considera anche java.text.MessageFormat, che utilizza una sintassi correlata con indici di argomenti numerici. Per esempio,

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

risulta nel stringcontenere quanto segue:

A string of ponies.

Più comunemente, la classe viene utilizzata per la sua formattazione numerica e temporale. Un esempio di JFreeChartformattazione dell'etichetta è descritto qui ; la classe RCInfoformatta il pannello di stato di un gioco.


1
Per qualcuno proveniente da CSharp questo modo è più semplice poiché è simile a string.Format in C #.
Mojtaba

0

puoi usare il formato String per includere variabili all'interno di stringhe

Uso questo codice per includere 2 variabili nella stringa:

String myString = String.format ("questa è la mia stringa% s% 2d", variable1Name, variable2Name);

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.