Я пытаюсь написать функцию для выполнения замены переменных среды в Java.Поэтому, если бы у меня была строка, которая выглядела так:
Путь APPDATA пользователя $ {USERNAME} равен $ {APPDATA}.
Я хочу, чтобы результат был:
Путь APPDATA пользователя msmith - C: \ Users \ msmith \ AppData \ Roaming.
Пока моя сломанная реализация выглядит так:
public static String expandEnvVars(String text) {
Map<String, String> envMap = System.getenv();
String pattern = "\\$\\{([A-Za-z0-9]+)\\}";
Pattern expr = Pattern.compile(pattern);
Matcher matcher = expr.matcher(text);
if (matcher.matches()) {
for (int i = 1; i <= matcher.groupCount(); i++) {
String envValue = envMap.get(matcher.group(i).toUpperCase());
if (envValue == null) {
envValue = "";
} else {
envValue = envValue.replace("\\", "\\\\");
}
Pattern subexpr = Pattern.compile("\\$\\{" + matcher.group(i) + "\\}");
text = subexpr.matcher(text).replaceAll(envValue);
}
}
return text;
}
Используя приведенный выше пример текста, matcher.matches()
возвращает false.Однако, если мой образец текста, ${APPDATA}
, он работает.
Кто-нибудь может помочь?