Question primitive, mais comment formater des chaînes de caractères comme celle-ci :
"Étape {1} de {2}"
en substituant des variables à l'aide de Java ? En C#, c'est facile.
Question primitive, mais comment formater des chaînes de caractères comme celle-ci :
"Étape {1} de {2}"
en substituant des variables à l'aide de Java ? En C#, c'est facile.
public class StringFormat {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("================================");
for(int i=0;i<3;i++){
String s1=sc.next();
int x=sc.nextInt();
System.out.println(String.format("%-15s%03d",s1,x));
}
System.out.println("================================");
}
}
outpot "================================"
ved15space123 ved15space123 ved15space123 "================================
Solution Java
Le "-" est utilisé pour mettre en retrait à gauche.
Le "15" fait que la longueur minimale de la chaîne qu'il prend en charge est de 15.
Le "s" (qui se trouve quelques caractères après %) sera substitué par notre chaîne de caractères
Le 0 complète notre entier avec des 0 à gauche.
Le 3 fait que notre entier a une longueur minimale de 3.
Cette solution a fonctionné pour moi. J'avais besoin de créer des urls pour un client REST de manière dynamique, j'ai donc créé cette méthode, il suffit de passer le restURL comme ceci
/customer/{0}/user/{1}/order
et ajoutez autant de paramètres que vous le souhaitez :
public String createURL (String restURL, Object ... params) {
return new MessageFormat(restURL).format(params);
}
Il suffit d'appeler cette méthode comme ceci :
createURL("/customer/{0}/user/{1}/order", 123, 321);
Le résultat
"/client/123/utilisateur/321/commande"
J'ai écrit cette fonction, elle fait exactement ce qu'il faut. Interpoler un mot commençant par $
avec la valeur de la variable du même nom.
private static String interpol1(String x){
Field[] ffield = Main.class.getDeclaredFields();
String[] test = x.split(" ") ;
for (String v : test ) {
for ( Field n: ffield ) {
if(v.startsWith("$") && ( n.getName().equals(v.substring(1)) )){
try {
x = x.replace("$" + v.substring(1), String.valueOf( n.get(null)));
}catch (Exception e){
System.out.println("");
}
}
}
}
return x;
}
Apache Commons StringSubstitutor
fournit un moyen simple et lisible de faire le format String
avec des variables nommées.
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"
El org.apache.commons.text.StringSubstitutor La classe d'aide Apache Commons Text permet de substituer des variables nommées.
Map<String, String> valuesMap = new HashMap<>();
valuesMap.put("animal", "quick brown fox");
valuesMap.put("target", "lazy dog");
String resolved = new StringSubstitutor(valuesMap).replace("The ${animal} jumped over the ${target}.");
System.out.println(resolved); // The quick brown fox jumped over the lazy dog.
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.
3 votes
Ver Cette question
0 votes
docs.oracle.com/javase/8/docs/api/java/util/