如何在带有符号{和“Java

时间:2017-05-17 02:32:51

标签: java string

我正在尝试对包含符号的字符串使用MessageFormat.format():{

我从我的.properties文件中获取此字符串,作为这样的键值对:

helloWorldString=hello{"hello":"{0}"}

我想使用

MessageFormat.format(helloWorldString, "world");

然而,这会引发错误 java.lang.IllegalArgumentException:无法解析参数号:“hello”:“%s”

我也尝试过:

helloWorldString=hello%7B%22hello%22:%22%s%22%7D

获取错误: java.util.UnknownFormatConversionException:Conversion ='2'

并且:

helloWorldString=hello%7B"hello":"%s"%7D

返回错误: java.util.UnknownFormatConversionException:Conversion ='D'

使用%s(或替代字符串占位符)格式化这些符号的任何帮助都将非常感谢!

2 个答案:

答案 0 :(得分:1)

您的属性文件条目应如下所示:

helloWorldString='{'"hello":"{0}"'}'

您必须使用{转义不包含参数的}'符号。

来自JavaDocs

  

在String中,一对单引号可用于引用除单引号之外的任意字符。例如,模式字符串“'{0}'”表示字符串“{0}”,而不是FormatElement。单引号本身必须在整个String中用双引号引用''。例如,模式字符串“'{''}'”被解释为'{(引用开始和左大括号),'(单引号)和}'(右大括号和结束)的序列引用),而不是'{'和'}'(引用左右花括号):表示字符串“{'}”,而不是“{}”。

答案 1 :(得分:-2)

你正在弥补它。看看Javadoc%s中没有MessageFormat功能。如果您希望结果为"hello world",则属性条目应为

helloWorldString="hello {0}"

同样你也是这样做的:

hello%7B%22hello%22:%22%s%22%7D

.properties文件或MessageFormat中没有网址编码功能。

使用文档。