用动态值替换字符串中的动态标签数量 - Java

m0n*_*ter 3 java string

我已经通过这个网站和谷歌搜索过,但我找不到针对我所面临的这个问题的具体解决方案。

语言:Java

我有一个字符串,让我们说:

String message = "I would like to have <variable>KG of rice and <variable>Litre of Milk. I only have $<variable>, is this sufficient?"
Run Code Online (Sandbox Code Playgroud)

现在,用户将拥有三个文本字段,它们将被排序以填充变量。

约束:

1) 用户可以在消息中输入尽可能多的标签

2) 将出现的文本字段的数量基于消息中的标签数量

无论如何我可以将原始消息替换为:

“我想要 {0} 公斤大米和 {1} 升牛奶。我只有 {2} 美元,够了吗?”

我正在更改为 {X},其中 X=订单号。如何实现这一目标?

我想过使用格式化程序、匹配器,但我一直都在死胡同。那么,有人可以帮助我吗?

谢谢你

flu*_*lup 6

我不完全确定您想要实现什么,但是如果我正确理解了确切的问题并且您希望<variable>将用户输入中的字符串依次替换为{0}, {1}{2}那么我认为这就是答案:

您可以使用Matcher匹配的所有事件<variable>,然后遍历比赛和使用appendReplacement通过替换它们{0}{1}{2},等。

所以

Matcher m = Pattern.compile("<variable>").matcher(input);
StringBuffer sb = new StringBuffer();
for( int i = 0; m.find(); i++){
    m.appendReplacement(sb, "{"+i+"}");
}
m.appendTail(sb);
Run Code Online (Sandbox Code Playgroud)


Pra*_*ran 5

试试这个。

String s = java.text.MessageFormat.format("I would like to have {0} KG of rice and {1} Litre of Milk. I only have ${2}, is this sufficient?",new String[]{"100","5","50"});
System.out.println(s);
Run Code Online (Sandbox Code Playgroud)

输出

我想要 100 公斤大米和 5 升牛奶。我只有50美元,够了吗?