324 votes

Comment utiliser java. String.format en Scala ?

Je suis en train d’utiliser une `` méthode d’une chaîne. Mais si je place %1, %2, etc. dans la chaîne, java.util.UnknownFormatConversionException est levée pointant sur un morceau de code source Java source de confusion :

De là, je comprends que `` char est interdit. Dans l’affirmative, alors que dois-je utiliser pour les paramètres fictifs argument ?

J’utilise Scala 2.8.

302voto

pr1001 Points 8334

Bien que toutes les réponses précédentes soient correctes, elles sont toutes en Java. Voici un exemple de Scala:

 val placeholder = "Hello %s, isn't %s cool?"
val formatted = placeholder.format("Ivan", "Scala")
 

J'ai aussi un blog sur faire format comme Python % opérateur qui pourrait être utile.

298voto

TM. Points 20051

Vous n'avez pas besoin d'utiliser des nombres pour indiquer le positionnement. Par défaut, la position de l'argument est tout simplement l'ordre dans lequel il apparaît dans la chaîne.

Voici un exemple de la façon appropriée d'utiliser ceci:

String result = String.format("The format method is %s!", "great");
// result now equals  "The format method is great!".

Vous utilisez toujours un % suivi par quelques autres caractères de laisser la méthode de savoir comment il doit afficher la chaîne de caractères. %s est probablement le plus commun, et cela signifie simplement que l'argument doit être traité comme une chaîne.

Je ne vais pas lister toutes les options, mais je vais vous donner quelques exemples, juste pour vous donner une idée:

// we can specify the # of decimals we want to show for a floating point:
String result = String.format("10 / 3 = %.2f", 10.0 / 3.0);
// result now equals  "10 / 3 = 3.33"

// we can add commas to long numbers:
result = String.format("Today we processed %,d transactions.", 1000000);
// result now equals  "Today we processed 1,000,000 transactions."

String.format utilise juste un java.util.Formatter, donc pour une description complète des options, vous pouvez voir le Formateur de la documentation javadoc.

Et, comme BalusC mentionne, vous pourrez le voir dans la documentation qu'il est possible de modifier la valeur par défaut de l'argument de la commande si vous en avez besoin. Cependant, probablement le seul moment où vous auriez besoin / envie pour ce faire est si vous êtes en utilisant le même argument plus d'une fois.

127voto

OscarRyz Points 82553

Au lieu de regarder le code source, vous devriez lire la javadoc de la Chaîne.format() et Formateur de la syntaxe.

Vous spécifiez le format de la valeur après l' %. Par exemple pour un entier décimal c'est - d, et à une Chaîne, c'est - s:

String aString = "world";
int aInt = 20;
String.format("Hello, %s on line %d",  aString, aInt );

Sortie:

Hello, world on line 20

À faire ce que vous avez essayé (utiliser un argument d'index), vous pouvez utiliser: *n*$,

String.format("Line:%2$d. Value:%1$s. Result: Hello %1$s at line %2$d", aString, aInt );

Sortie:

Line:20. Value:world. Result: Hello world at line 20

70voto

Engin Ardıç Points 1447

Vous pouvez l'utiliser

 String.format("%1$s %2$s %2$s %3$s", "a", "b", "c");
 

Sortie:

abbc

13voto

denis phillips Points 7349

Notez également que Scala étend String avec un certain nombre de méthodes (via une conversion implicite en WrappedString apportée par Predef). Vous pouvez également effectuer les opérations suivantes:

 val formattedString = "Hello %s, isn't %s cool?".format("Ivan", "Scala")
 

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