Java中MessageFormat替换{0}占位符失效问题求助
问题原因与解决方案
嘿,我来帮你理清楚这个问题~
你遇到的问题根源在于MessageFormat对单引号的特殊处理规则:在MessageFormat的格式化字符串里,单引号是用来做转义的——它会把包裹的内容当成普通文本,不会解析其中的占位符(比如{0})。所以你写的"'{0}'"会被直接识别成字符串{0},自然不会替换成你传入的"1"啦。
正确的写法分两种情况:
情况1:你想输出带单引号的结果(比如'1')
要在MessageFormat里输出普通的单引号,需要用两个连续的单引号来表示一个单引号,这样占位符就能正常被解析了:
String formattedText = MessageFormat.format("''{0}''", "1"); System.out.println(formattedText); // 输出:'1'
情况2:你只想替换占位符,不需要单引号
直接去掉包裹占位符的单引号就行:
String formattedText = MessageFormat.format("{0}", "1"); System.out.println(formattedText); // 输出:1
简单来说,MessageFormat里的单引号是用来"保护"内容不被解析的,如果你既想要单引号又想要占位符生效,就得用两个单引号来转义出一个普通单引号,同时让占位符处于单引号的包裹之外。
内容的提问来源于stack exchange,提问作者VIBHOR GOYAL
相关产品推荐
相关产品推荐

