Как интерполировать переменные внутри строки, используя HashMap в качестве источника переменных - PullRequest
0 голосов
/ 30 марта 2020

Допустим, у нас есть строка: 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");

Как заменить / интерполировать переменные в строке с соответствующими им значениями Regex в качестве ключей hashmap? (возможно, нет необходимости использовать Regex, и Java имеет эту реализацию)

В конце я хочу, чтобы переменная string text равнялась "Hello my name is John and my surname is Doe"

РЕДАКТИРОВАТЬ: я имел в виду замену ключ / переменная со значением hashmap, не зная ключа. Например, у нас есть строка, и мы должны заменить все значения $$variable; внутри на map[variable].

Каким будет самый быстрый способ замены этой строки?

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Вы должны использовать некоторое регулярное выражение, проанализировать ввод и найти все ключи на карте, например:

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

}

Вывод:

Здравствуйте, меня зовут Джон и моя фамилия Доу

1 голос
/ 30 марта 2020

Вы можете перебрать variables и заменить соответствующие ключи соответствующими значениями, не зная ключ, используя foreach l oop.

for(Map.Entry<String, String> e: variables.entrySet()) {
    text = text.replace("$$"+e.getKey(), e.getValue());
}

Попробуйте это:

String text = "Hello my name is $$name; and my surname is $$surname;";

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

for(Map.Entry<String, String> e: variables.entrySet()) {
    text = text.replace("$$"+e.getKey(), e.getValue());
}

System.out.println(text);

Вывод:

Hello my name is John; and my surname is Doe;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...