変数ソースとしてHashMapを使用して文字列内の変数を補間する方法

パーチメント:

我々は、文字列があるとしましょう: string text = "Hello my name is $$name; and my surname is $$surname;"

:それは二重のドル記号で識別される2つの変数、参照姓を

また、ハッシュマップを持っています:

HashMap<String, String> variables = new HashMap<String, String>();
variables.put("name", "John");
variables.put("surname", "Doe");

どのように私は/補間置き換えるない変数ハッシュマップのキーとしての一致した正規表現の値を持つ文字列の中に?(おそらく正規表現とJavaは、この実装を持って使用する必要はありません)

最後に、私は、変数をしたいstring text等しいへ"Hello my name is John and my surname is Doe"

編集:私は何を意味して鍵を知らなくても、ハッシュマップの値を持つキー/変数を置き換えています。たとえば、私たちは、文字列を持っていると我々はすべて交換する必要があります$$variable;と内側の値をmap[variable]

この文字列を置換する最速の方法は何でしょうか?

ドリアングレイ:

あなたはそのような、いくつかの正規表現を使用した入力を解析し、地図内のすべてのキーをルックアップする必要があります:

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(CharSequence s, Map<String, String> variables) {
        return PATTERN.matcher(s).replaceAll(mr -> variables.getOrDefault(mr.group(1), ""));
    }

}

出力:

こんにちは、私の名前はジョンで、私の姓がDoeの

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=367278&siteId=1