Замена неизвестных переменных в уравнении
Итак, мы имеем:
String test2 = "12+x+43+y+32-100";
Map<String, String> values = new HashMap<String, String>();
values.put("x", "3");
values.put("y", "7");
for (String key : values.keySet()) {
if (test2.contains(key)) {
String result = test2.replaceAll(key, values.get(key));
System.out.println(result);
}
}
Выход:
12 + 3 + 43 + у + 32-100
12 + х +43+7+32-100
Пока должно быть:
12 + 3 +43+7+32-100
3 ответа
Замещать result
с test2
test2= test2.replaceAll(key,values.get(key));
System.out.println(test2);
если вы создаете новую переменную result
при каждом запуске вы получаете новую строку, где заменяется только одна переменная
В вашем цикле for после нахождения x он был заменен на 3. Затем он печатает 12+3+43+y+32-100, а затем снова проверяет цикл на наличие букв. Затем он находит y и заменяет на 7. Но предыдущая переменная x не будет затронута. Итак, 12 + x + 43 + 7 + 32-100 будет напечатано.
Java String объекты являются неизменяемыми. Метод replaceAll() возвращает новый объект String с примененной манипуляцией, и ваш объект test2 не изменяется.
Таким образом, вы должны либо применить новую модификацию в вашем объекте результата, либо переназначить объект test2 возвращаемому объекту.
for (String key : values.keySet()) {
if (test2.contains(key)) {
test2 = test2.replaceAll(key, values.get(key));
System.out.println(test2);
}
}