Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用HashMap作为变量源在字符串中插入变量_Java_Regex_String_Hashmap - Fatal编程技术网

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), ""));
    }

}