3

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

语言:Java

我有一个字符串,可以说:

String message = "I would like to have <variable>KG of rice and <variable>Litre of Milk. I only have $<variable>, is this sufficient?"

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

约束:

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

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

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

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

我将更改为 {X},其中 X=订单号。如何做到这一点?

我曾考虑过使用格式化程序、匹配程序,但我一直都走入了死胡同。那么,有人可以帮我解决这个问题吗?

谢谢你

4

5 回答 5

6

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

您可以使用 aMatcher匹配所有出现的<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);
于 2013-10-22T09:59:33.917 回答
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);

输出

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

于 2013-10-22T09:58:33.960 回答
0
String mesage = "I would like to have " + kg + 
"KG of rice and " + litre + "Litre of Milk. I only have $" + dollor + " 
is this sufficient?";
于 2013-10-22T09:59:33.527 回答
0

你可以使用这样的东西:

int i = 0;
while(message.contains("<variable>")) {
    message = message.replaceFirst("<variable>", "{" + i + "}");
    i++;
}

这将导致:

I would like to have {0}KG of rice and {1}Litre of Milk. I only have ${2}, is this sufficient?
于 2013-10-22T10:00:46.657 回答
0

String.format 很方便,而不是循环。看看下面:

String mesage = "I would like to have %d KG of rice and %d Litre of Milk. I only have $ %d is this sufficient?";
System.out.println(String.format(mesage, 5, 1, 10));
System.out.println(String.format(mesage, 10, 2, 50));

请参阅https://www.javatpoint.com/java-string-format了解不同的格式说明符:%d %s 等。

于 2021-02-12T11:59:32.923 回答