命名消息参数

时间:2015-01-26 23:12:21

标签: java messageformat

在这种情况下,我经常使用MessageFormat作为索引参数:

String text = MessageFormat.format("The goal is {0} points.", 5);

现在我遇到了需要处理以下格式的消息的情况:

"The {title} is {number} points."

因此,值不再被索引,占位符也是字符串。如何处理这种情况并具有与MessageFormat相同的功能?如果params未编入索引,MessageFormat将抛出解析异常。

谢谢。

1 个答案:

答案 0 :(得分:1)

一个简单的建议是将text参数替换为带有正则表达式匹配的索引,然后像平常一样使用它。这是一个例子:

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将等于"踢出3分"最后。