Correct format string for String.format or similar
Yes, that's the typical format string of C#. In Java, you can use the latter, that is, String.format("%s %d %d", ...)
.
An alternative is to use MessageFormat.format("Some {0}, {1}, {2}", var1, var2, var3)
, which uses the .NET curly braces notation, as mentioned by @Tobias, though it requires you to import java.text.MessageFormat
. They are also more appropriate for when you are dealing with localized resources, where you typically have external .properties
files with messages in the format Error {0} ocurred due to {1}
.
What you are looking for is MessageFormat
, which uses a given format and input parameters, e.g.
MessageFormat.format("Some {0}, {1}, {2}", var1, var2, var3);
And as already mentioned, String.format
can still do the job using the alternate syntax, but it is less powerful in functionality and not what you requested.
I do not like to specify both index of parameter or its type - mainly when throwing exception and preparing message for it. I like way SLF4j does it. So I wrapped org.slf4j.helpers.MessageFormatter like this:
public static String subst(String string, Object...objects) {
return MessageFormatter.arrayFormat(string, objects).getMessage();
}
Then you can use it like this:
public void main(String[] args) {
throw new RuntimeException(MyUtils.subst("Problem with A={} and B={}!", a, b));
}