140 votes

Java - Inclure des variables dans des chaînes de caractères ?

Ok, donc nous devrions tous savoir que vous pouvez inclure des variables dans des chaînes de caractères en faisant :

String string = "A string " + aVariable;

Y a-t-il un moyen de le faire comme :

String string = "A string {aVariable}";

En d'autres termes : Sans devoir fermer les guillemets et ajouter des signes plus. C'est très peu attrayant.

145voto

Vous pouvez toujours utiliser String.format(....). c'est-à-dire..,

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

Je ne sais pas si cela est suffisamment attrayant pour vous, mais cela peut être très pratique. La syntaxe est la même que pour printf et java.util.Formatter. Je m'en suis beaucoup servi, surtout si je veux afficher des données numériques sous forme de tableau.

80voto

Jacob Mattison Points 32137

C'est ce qu'on appelle l'interpolation de chaînes de caractères ; elle n'existe pas en tant que telle en Java.

Une approche consiste à utiliser String.format :

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

Une autre approche consiste à utiliser une bibliothèque de modèles telle que Vélocité ou FreeMarker .

44voto

trashgod Points 136305

Considérez également java.text.MessageFormat qui utilise une syntaxe connexe avec des index d'arguments numériques. Par exemple,

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

résulte en string contenant les éléments suivants :

A string of ponies.

Plus couramment, la classe est utilisée pour son formatage numérique et temporel. Un exemple de JFreeChart Le formatage des étiquettes est décrit ici ; la classe RCInfo met en forme le panneau d'état d'un jeu.

5voto

Domadin Points 81

Depuis Java 15, vous pouvez utiliser une méthode de chaîne non statique appelée String::formatted(Object... args)

Exemple :

String foo = "foo";
String bar = "bar";

String str = "First %s, then %s".formatted(foo, bar);     

Sortie :

"D'abord foo, puis bar"

2voto

hev1 Points 6033

Apache Commons StringSubstitutor peut être utilisé.

import org.apache.commons.text.StringSubstitutor;
// ...
Map<String, String> values = new HashMap<>();
values.put("animal", "quick brown fox");
values.put("target", "lazy dog");
StringSubstitutor sub = new StringSubstitutor(values);
String result = sub.replace("The ${animal} jumped over the ${target}.");
// "The quick brown fox jumped over the lazy dog."

Cette classe permet de fournir des valeurs par défaut pour les variables.

String result = sub.replace("The number is ${undefined.property:-42}.");
// "The number is 42."

Pour utiliser le remplacement récursif de variables, appelez setEnableSubstitutionInVariables(true); .

Map<String, String> values = new HashMap<>();
values.put("b", "c");
values.put("ac", "Test");
StringSubstitutor sub = new StringSubstitutor(values);
sub.setEnableSubstitutionInVariables(true);
String result = sub.replace("${a${b}}");
// "Test"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X