String.format或类似的正确格式字符串

我确定我之前看到过像这样使用的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仍然可以使用备用语法来完成工作,但它的function不强,而不是您请求的function。

是的,这是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}格式的消息。

我不喜欢指定参数索引或其类型 – 主要是在抛出exception并为其准备消息时。 我喜欢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)); }