正确的格式字符串的String.format或类似(Correct format string fo

2019-07-31 05:06发布

我敢肯定,我见过String.format像这样使用前:

String.format("Some {1}, {2}, {3}", var1, var2, var3);

这是否响任何人任何钟声? 也许我想的C#,是否有在java中实现相同的方法吗?

我知道你可以这样做:

String.format("Some %s, %d, %s", aString, aNumber, aString)

但我以后语法是前者...

Answer 1:

你所寻找的是MessageFormat ,它使用给定的格式和输入参数,例如,

MessageFormat.format("Some {0}, {1}, {2}", var1, var2, var3);

而如前所述, String.format仍然可以使用替代语法的工作,但它在功能不太强大,而不是你的要求是什么。



Answer 2:

是的,这是典型的格式的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}



Answer 3:

我不喜欢指定参数,或者其类型的两个指标 - 抛出异常,并为它准备的消息主要是当。 我喜欢的方式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));
}


文章来源: Correct format string for String.format or similar