命名消息参数
Named message params
在这种情况下,我经常使用 MessageFormat
作为索引参数:
String text = MessageFormat.format("The goal is {0} points.", 5);
现在我遇到了一种情况,我需要处理以下格式的消息:
"The {title} is {number} points."
所以,值不再被索引,占位符是字符串。我该如何处理这种情况并拥有与 MessageFormat
相同的功能? MessageFormat
如果参数未被索引,则抛出解析异常。
谢谢。
一个简单的建议是用正则表达式匹配替换作为索引的文本参数,然后像往常一样使用它。这里有一个例子:
int paramIndex = 0;
String text = "The {title} is {number} points.";
String paramRegex = "\{(.*?)\}";
Pattern paramPattern = Pattern.compile(paramRegex);
Matcher matcher = paramPattern.matcher(text);
while(matcher.find())
text = text.replace(matcher.group(), "{" + paramIndex++ + "}");
text = MessageFormat.format(text, "kick", "3");
在这种情况下,text
最后等于 "The kick is 3 points"。
在这种情况下,我经常使用 MessageFormat
作为索引参数:
String text = MessageFormat.format("The goal is {0} points.", 5);
现在我遇到了一种情况,我需要处理以下格式的消息:
"The {title} is {number} points."
所以,值不再被索引,占位符是字符串。我该如何处理这种情况并拥有与 MessageFormat
相同的功能? MessageFormat
如果参数未被索引,则抛出解析异常。
谢谢。
一个简单的建议是用正则表达式匹配替换作为索引的文本参数,然后像往常一样使用它。这里有一个例子:
int paramIndex = 0;
String text = "The {title} is {number} points.";
String paramRegex = "\{(.*?)\}";
Pattern paramPattern = Pattern.compile(paramRegex);
Matcher matcher = paramPattern.matcher(text);
while(matcher.find())
text = text.replace(matcher.group(), "{" + paramIndex++ + "}");
text = MessageFormat.format(text, "kick", "3");
在这种情况下,text
最后等于 "The kick is 3 points"。