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)); }
- java正则表达式 – 拆分但忽略引号内的文字?
- pdfBox – 签名有效性复选标记在Acrobat阅读器中不可见
- 如何在返回多种类型XML的URL上使用Spring RestTemplate和JAXB编组
- 如何在Java HttpServletRequest中获取客户端IP地址
- 如何启动两个播放应用程序实例?
- ClassCastException:尝试迭代实体ID时,无法将Integer强制转换为Long
- java.lang.UnsupportedOperationException用于从javafx tableview中删除行
- 数组等于忽略顺序
- 在Mac OS X NetBeans上使用sqlite4java Jar的UnsatisfiedLinkError