Java 如何使用HashMap作为变量源在字符串中插入变量
假设我们有一个字符串:Java 如何使用HashMap作为变量源在字符串中插入变量,java,regex,string,hashmap,Java,Regex,String,Hashmap,假设我们有一个字符串:string text=“您好,我的名字是$$name;我的姓氏是$$姓氏;” 它引用了两个变量,由双美元符号标识:name和姓氏 我们还有一个hashmap: HashMap<String, String> variables = new HashMap<String, String>(); variables.put("name", "John"); variables.put("surname", "Doe"); HashMap variab
string text=“您好,我的名字是$$name;我的姓氏是$$姓氏;”
它引用了两个变量,由双美元符号标识:name和姓氏
我们还有一个hashmap:HashMap<String, String> variables = new HashMap<String, String>();
variables.put("name", "John");
variables.put("surname", "Doe");
HashMap variables=newhashmap();
变量。put(“name”、“John”);
变量。put(“姓氏”、“Doe”);
如何使用匹配的正则表达式值作为hashmap键替换/插入字符串中的变量?(也许不需要使用正则表达式,Java有这个实现)
最后,我希望变量字符串文本
等于“你好,我的名字是约翰,我的姓是多伊”
编辑:我的意思是在不知道键的情况下用hashmap值替换键/变量。例如,我们有一个字符串,必须替换所有$$变量代码>值与映射[变量]
在一起
替换此字符串的最快方法是什么?您可以迭代变量
,用相应的值替换匹配的键,而不需要使用foreach循环知道键
for(Map.Entry<String, String> e: variables.entrySet()) {
text = text.replace("$$"+e.getKey(), e.getValue());
}
您必须使用一些正则表达式,解析输入并查找映射中的每个键,如下所示:
import java.util.Map;
import java.util.regex.Pattern;
public class T2 {
/** Pattern for the variables syntax */
public static final Pattern PATTERN = Pattern.compile("\\$\\$([a-zA-Z]+);");
public static void main(String[] args) {
String s = "Hello my name is $$name; and my surname is $$surname;";
Map<String, String> variables = Map.of("name", "John", "surname", "Doe");
String ret = replaceVariables(s, variables);
System.out.println(ret);
}
private static String replaceVariables(final CharSequence s, final Map<? super String, String> variables) {
return PATTERN.matcher(s).replaceAll(mr -> variables.getOrDefault(mr.group(1), ""));
}
}
import java.util.Map;
导入java.util.regex.Pattern;
公共课T2{
/**变量语法的模式*/
publicstaticfinalpattern=Pattern.compile(“\\$\\$([a-zA-Z]+);”);
公共静态void main(字符串[]args){
String s=“你好,我的名字是$$name;我的姓氏是$$name;”;
Map变量=Map.of(“姓名”、“约翰”、“姓氏”、“Doe”);
字符串ret=替换变量;
系统输出打印项次(ret);
}
私有静态字符串replaceVariables(final CharSequence,final map)您可以使用简单的find/replace。或者使用成熟的模板引擎。如果您的映射中缺少变量,那么如何处理这些问题,如何输出双美元,等等。。。
Hello my name is John; and my surname is Doe;
import java.util.Map;
import java.util.regex.Pattern;
public class T2 {
/** Pattern for the variables syntax */
public static final Pattern PATTERN = Pattern.compile("\\$\\$([a-zA-Z]+);");
public static void main(String[] args) {
String s = "Hello my name is $$name; and my surname is $$surname;";
Map<String, String> variables = Map.of("name", "John", "surname", "Doe");
String ret = replaceVariables(s, variables);
System.out.println(ret);
}
private static String replaceVariables(final CharSequence s, final Map<? super String, String> variables) {
return PATTERN.matcher(s).replaceAll(mr -> variables.getOrDefault(mr.group(1), ""));
}
}