我正在尝试对包含符号的字符串使用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(或替代字符串占位符)格式化这些符号的任何帮助都将非常感谢!
答案 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
中没有网址编码功能。
使用文档。