replaceAll повторяет символы - PullRequest
0 голосов
/ 17 июня 2020

По какой-то причине я получаю этот результат

pass: 12345

port: 8080

cook ie: not found

host: localhost

пароль: 12345

Когда я хочу

проход: 12345

порт: 8080

готовить ie: не найдено

хост: localhost

пароль: 12345

  public static String modifyString(String str) {
    if (str.matches("(.*)=($)")){
        str = str.replace("=", " : not found");
    } else {
        str = str.replace("=", " : ");
    }
    return str;
}

            if (arr[i] != null){
            if (arr[i].contains("pass")) {
                arr[arr.length - 1] = arr[i];
                arr[arr.length -1] = arr[i].replaceAll("pass", "password");
                System.out.println(modifyString(arr[i]));

            } else {
                System.out.println(modifyString(arr[i]));
            }

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

Так как replaceAll («pass», «password») соответствует « pass word», вы получите « password word».

Чтобы решить эту проблему, простое решение заключается в использовании регулярного выражения:

string.replaceAll("\\bpass\\b", "password");

Это приведет к тому, что оно будет соответствовать только слову «пройти» и не будет выполнять частичные совпадения.

Дополнительную документацию по этому вопросу можно найти в Pattern класс документации Javadocs или дополнительные примеры в этой статье:

https://howtodoinjava.com/regex/java-regex-specific-contain-word/

0 голосов
/ 17 июня 2020

Вы пытаетесь обработать строку «пароль». replaceAll («пароль», «пароль») заменяет «пароль» на «пароль» и сохраняет конечное «слово». Так что результат обязательно должен быть «пароль».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...