Je suis sûr d'avoir vu String.format
utilisé comme ceci auparavant:
String.format("Some {1}, {2}, {3}", var1, var2, var3);
Est-ce que cela vous dit quelque chose? Peut-être que je pense à C #, y a-t-il un moyen d'y parvenir en java?
Je sais que tu peux faire quelque chose comme:
String.format("Some %s, %d, %s", aString, aNumber, aString)
mais la syntaxe que je recherche est pour la première ...
Ce que vous recherchez est MessageFormat
, qui utilise un format et des paramètres d'entrée donnés, par ex.
MessageFormat.format("Some {0}, {1}, {2}", var1, var2, var3);
Et comme déjà mentionné, String.format
peut toujours faire le travail en utilisant la syntaxe alternative, mais elle est moins puissante en fonctionnalités et non pas ce que vous avez demandé.
Oui, c'est la chaîne typique format de C # . En Java, vous pouvez utiliser ce dernier, c'est-à-dire String.format("%s %d %d", ...)
.
Une alternative consiste à utiliser MessageFormat.format("Some {0}, {1}, {2}", var1, var2, var3)
, qui utilise la notation d'accolades .NET, comme mentionné par @Tobias, même si cela vous oblige importer Java.text.MessageFormat
. Ils conviennent également mieux lorsque vous traitez avec des ressources localisées, lorsque vous disposez généralement de .properties
fichiers contenant des messages au format Error {0} ocurred due to {1}
.
Je n'aime pas spécifier à la fois l'index du paramètre ou son type - principalement lors du lancement d'une exception et de la préparation d'un message. J'aime la façon dont SLF4j le fait. J'ai donc enveloppé org.slf4j.helpers.MessageFormatter comme ceci:
public static String subst(String string, Object...objects) {
return MessageFormatter.arrayFormat(string, objects).getMessage();
}
Ensuite, vous pouvez l'utiliser comme ceci:
public void main(String[] args) {
throw new RuntimeException(MyUtils.subst("Problem with A={} and B={}!", a, b));
}