我敢肯定,我见过String.format
像这样使用前:
String.format("Some {1}, {2}, {3}", var1, var2, var3);
这是否响任何人任何钟声? 也许我想的C#,是否有在java中实现相同的方法吗?
我知道你可以这样做:
String.format("Some %s, %d, %s", aString, aNumber, aString)
但我以后语法是前者...
我敢肯定,我见过String.format
像这样使用前:
String.format("Some {1}, {2}, {3}", var1, var2, var3);
这是否响任何人任何钟声? 也许我想的C#,是否有在java中实现相同的方法吗?
我知道你可以这样做:
String.format("Some %s, %d, %s", aString, aNumber, aString)
但我以后语法是前者...
你所寻找的是MessageFormat
,它使用给定的格式和输入参数,例如,
MessageFormat.format("Some {0}, {1}, {2}", var1, var2, var3);
而如前所述, String.format
仍然可以使用替代语法的工作,但它在功能不太强大,而不是你的要求是什么。
是的,这是典型的格式的C#字符串。 在Java中,你可以使用后者,也就是String.format("%s %d %d", ...)
一个替代方案是使用MessageFormat.format("Some {0}, {1}, {2}", var1, var2, var3)
虽然它需要你,它使用.NET大括号表示法,如通过@Tobias提到的,进口java.text.MessageFormat
。 他们也更适合当你正在处理的本地化资源,在这里你通常有外部的.properties
与格式文件的消息Error {0} ocurred due to {1}
我不喜欢指定参数,或者其类型的两个指标 - 抛出异常,并为它准备的消息主要是当。 我喜欢的方式SLF4J做的。 所以我裹org.slf4j.helpers.MessageFormatter是这样的:
public static String subst(String string, Object...objects) {
return MessageFormatter.arrayFormat(string, objects).getMessage();
}
然后你可以使用它像这样:
public void main(String[] args) {
throw new RuntimeException(MyUtils.subst("Problem with A={} and B={}!", a, b));
}