Замена неизвестных переменных в уравнении

Итак, мы имеем:

    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);
    }
}
Другие вопросы по тегам