Question primitive, mais comment formater des chaînes comme celle-ci:
"Étape {1} sur {2}"
en substituant des variables à l'aide de Java? En C #, c'est facile.
java
string
string-formatting
Katit
la source
la source
Réponses:
En plus de String.format, jetez également un œil
java.text.MessageFormat
. Le format est moins laconique et un peu plus proche de l'exemple C # que vous avez fourni et vous pouvez également l'utiliser pour l'analyse.Par exemple:
Un meilleur exemple tire parti des améliorations apportées aux varargs et à l'autoboxing de Java 1.5 et transforme ce qui précède en une seule ligne:
MessageFormat
est un peu plus agréable pour faire des pluriels i18nisés avec le modificateur de choix. Pour spécifier un message qui utilise correctement la forme singulière lorsqu'une variable est 1 et plurielle sinon, vous pouvez faire quelque chose comme ceci:la source
MessageFormat.format("Number {0}", 1234));
fonction des paramètres régionaux par défaut peut produire à laNumber 1,234
place deNumber 1234
.{0} it ll take firstname
, quand{1} then lastname
, comme ça. Est-ce possible comme{0,choice,0.getFirstName()}
ça ou quelque chose comme ça?Jetez un œil à String.format . Notez, cependant, qu'il prend des spécificateurs de format similaires à ceux de la famille de fonctions printf de C - par exemple:
Je retournerais "Hello world, 42". Vous pouvez trouver ce utile lors de l' apprentissage sur les spécificateurs. Andy Thomas-Cramer a eu la gentillesse de laisser ce lien dans un commentaire ci-dessous, qui semble pointer vers la spécification officielle. Les plus couramment utilisés sont:
Ceci est radicalement différent de C #, qui utilise des références de position avec un spécificateur de format facultatif.
Cela signifie que vous ne pouvez pas faire des choses comme:...
sans répéter réellement le paramètre passé à printf / format.(voir le commentaire de The Scrum Meister ci-dessous)Si vous souhaitez simplement imprimer le résultat directement, vous pouvez trouver System.out.printf ( PrintStream.printf ) à votre goût.
la source
String.format
peut également prendre des positions numériques:String.format("%2$s %1$s", "foo", "bar");
sortirabar foo
Si vous choisissez de ne pas utiliser String.format, l'autre option est l'opérateur + binaire
C'est l'équivalent de
new StringBuilder("Step ").append(String.valueOf(1)).append(" of ").append(String.valueOf(2));
Celui que vous utilisez est votre choix. StringBuilder est plus rapide, mais la différence de vitesse est marginale. Je préfère utiliser l'
+
opérateur (qui fait unStringBuilder.append(String.valueOf(X)))
et le trouve plus facile à lire.la source
+
opérateur. 2) Votre explication n'est même pas exacte.+
équivaut à utiliserStringBuilder
, nonString.concat
. (Beaucoup trop d'informations à ce sujet.)J'ai écrit ma méthode simple pour cela:
vous pouvez donc l'utiliser comme:
la source
Solution Java
Le "-" est utilisé pour le retrait à gauche
Le "15" fait que la longueur minimale de la chaîne est de 15
la source
Cette solution a fonctionné pour moi. J'avais besoin de créer dynamiquement des URL pour un client REST, j'ai donc créé cette méthode, il vous suffit donc de passer la restURL comme ceci
et ajoutez autant de paramètres que nécessaire:
Il vous suffit d'appeler cette méthode comme ceci:
Le résultat
la source
J'ai écrit cette fonction, elle fait exactement ce qu'il faut. Interpole un mot commençant par
$
la valeur de la variable du même nom.la source