【发布时间】:2022-01-08 12:06:59
【问题描述】:
我正在使用 java-17 并且以下代码 sn-p 中断,因为 MessageFormat 获取 JSON 符号,例如 { 和 } 并将它们解释为它自己的格式化程序,从而阻止格式化字符串:
import java.math.BigDecimal;
import java.text.MessageFormat;
public class Test {
public static void main(final String[] args) {
System.out.println(MessageFormat.format("""
{
"a": "{0}",
{
"b": "{0}"
"c": "{0}"
"d": {1,number,#.##}
}
}""", "Test", new BigDecimal("10.123")));
}
}
这是堆栈跟踪:
Exception in thread "main" java.lang.IllegalArgumentException: can't parse argument number:
"a": "{0}"
at java.base/java.text.MessageFormat.makeFormat(MessageFormat.java:1454)
at java.base/java.text.MessageFormat.applyPattern(MessageFormat.java:492)
at java.base/java.text.MessageFormat.<init>(MessageFormat.java:371)
at java.base/java.text.MessageFormat.format(MessageFormat.java:860)
at Test.main(Test.java:9)
Caused by: java.lang.NumberFormatException: For input string: "
"a": "{0}""
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
at java.base/java.lang.Integer.parseInt(Integer.java:654)
at java.base/java.lang.Integer.parseInt(Integer.java:786)
at java.base/java.text.MessageFormat.makeFormat(MessageFormat.java:1452)
... 4 more
为了 MessageFormat 实际格式化字符串,转义这些符号的正确方法是什么?
【问题讨论】:
-
@Naman,是的。我会结束这个问题。
标签: java-17 java json escaping java-17 messageformat