当前位置: 首页 > 知识库问答 >
问题:

Java用名称替换花括号中的单词

巫马翰翮
2023-03-14

我有一个字符串:

String message = "This is a message for {ID_PW}. Your result is {exam_result}. Please quote {ID_PW} if replying";

我正在从CSV导入数据,我想用这些数据替换花括号之间的项。

java prettyprint-override">// Using OpenCSV to read in CSV...code omitted for brevity
values = (Map<String, String>) reader.readMap();
// values has 'ID_PW', 'exam_result', etc keys

如何将消息中花括号中的项替换为中键的等效值?

共有2个答案

缪远
2023-03-14

您可能正在寻找:

String s = "I bought {0,number,integer} mangos. From {1}, the fruit seller. Out of them {2,number,percent} were bad.";
MessageFormat formatter = new MessageFormat(s);
Object[] argz = {22, "John", 0.3};
System.out.println(formatter.format(argz));

这输出:

I bought 22 mangos. From John, the fruit seller. Out of them 30% were bad.

有关更多详细信息,请参阅https://docs.oracle.com/javase/8/docs/api/java/text/messageformat.html。

高皓
2023-03-14

试试看:

for (Map.Entry<String, String> entry : values.entrySet())
{
    message = message.replaceAll("\\{" + Pattern.quote(entry.getKey()) + "\\}", entry.getValue());
}

String.ReplaceAll(String,String)的第一个参数是一个正则表达式,因此values映射的键应该被引用(通过pattern.quote(String))以防止它们被解释为正则表达式。

 类似资料:
  • 我试图创建一个数据数组与FLOT图表一起使用。我使用这个CodeIgniter代码来生成数组: 这段代码的问题是无法绘制生成的JSON对象,因为“值”实际上是字符串。以下是有问题的JSON输出: 这个JSON有三个问题: 需要方括号而不是花括号;和 以下是JSON输出的格式: 清理这个JSON对象的最佳方法是什么?我应该在服务器端使用CodeIgniter代码吗?或者我应该在javascript中

  • 问题内容: 我对这个尖角世界是陌生的,我对使用双花括号{{}}和单花括号{}感到困惑,或者有时不使用花括号来包含指令中的表达式 问题答案: {{}}-双大括号: 是Angular表达式,当您希望将内容编写为HTML时非常方便: 不要在已经是表达式的地方使用它们! 例如,该指令将引号之间的任何内容都视为一个表达式: {}-大括号: 我们知道JavaScript代表对象。这里也没有什么不同: 使用一些

  • 问题内容: 我正在看书,有一些带有花括号的程序示例 例如 问题答案: 这是一个代码块。在其中声明的变量在上部代码块(这些curl之外的方法体)中不可见,即它们的作用域更加有限。

  • 我有一个类型TEXT的PostgreSQL列中的数据,我需要做一些字符替换。具体来说,我想用大括号代替方括号。问题是,我只想替换不超过两层深的括号,如果你包括主要的封闭括号。这些字符串可能很长,所以我认为正则表达式可能是最好的方法(函数),但我不擅长正则表达式。这里有一个这样的值的例子: 因此,我希望此字符串更改为: 提前谢谢!

  • Note: 这个特性从 FreeMarker 2.3.4 版本后才存在。 FreeMarker支持一个替换的语法。就是在FreeMarker的指令和注释中用 [ 和 ] 来代替 < 和 >,例如下面这个例子: 调用预定义指令:[#list animals as animal]...[/#list] 调用自定义指令:[@myMacro /] 注释:[#-- the comment --] 为了使用这