265 votes

Comment formater les chaînes de caractères en Java

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.

3 votes

0 votes

6voto

Ved Prakash Points 945
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.

2voto

Felipe Bejarano Points 139

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"

1voto

DefconT34 Points 11

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;
}

1voto

hev1 Points 6033

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"

0voto

vlcheong Points 1

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