【问题标题】:How to escape json-stylished String to work with MessageFormat? [duplicate]如何转义 json 风格的字符串以使用 MessageFormat? [复制]
【发布时间】:2022-01-08 12:06:59
【问题描述】:

我正在使用 并且以下代码 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


【解决方案1】:

Java 17 中的语法不会发生任何变化,因为 MessageFormat 是 Java 7 中的 known。 正如过去在这里引用的: Accepted answer for Question #1187093

在字符串中,一对单引号可用于引用除单引号之外的任意字符。例如,模式字符串“'{0}'”表示字符串“{0}”,而不是 FormatElement。

【讨论】:

  • 使用 ' 转义 { 有效。
猜你喜欢
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
相关资源
最近更新 更多