Неверный вывод с использованием replaceall - PullRequest
1 голос
/ 03 марта 2011

Почему я получаю "AAAAAAAAA" вместо "1A234A567" из следующего кода:

String myst = "1.234.567";

String test = myst.replaceAll(".", "A");

System.out.println(test);

Любая идея?

Ответы [ 4 ]

7 голосов
/ 03 марта 2011

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

String test = myst.replace(".", "A");

разница: replaceAll() интерпретирует шаблон как регулярное выражение, replace() интерпретирует его как строковый литерал.

Вот соответствующий исходный код от java.lang.String (с отступом и комментарием от меня):

public String replaceAll(String regex, String replacement) {
    return Pattern.compile(regex)
                  .matcher(this)
                  .replaceAll(replacement);
}


public String replace(CharSequence target, CharSequence replacement) {
    return Pattern.compile(
              target.toString(),
              Pattern.LITERAL /* this is the difference */
           ).matcher(this)
            .replaceAll(
                Matcher.quoteReplacement(
                    /* replacement is also a literal,
                       not a pattern substitution */
                    replacement.toString()
            ));
}

Справка:

6 голосов
/ 03 марта 2011

replaceAll функция принимает регулярное выражение в качестве параметра.И регулярное выражение "."означает «любой символ».Вы должны выйти из него, чтобы указать, что это символ, который вы хотите: replaceAll("\\.", "A")

1 голос
/ 03 марта 2011

Вам нужно сбежать .

сделать это

String myst = "1.234.567";

String test = myst.replaceAll("\\.", "A");

System.out.println(test);
0 голосов
/ 03 марта 2011

Поскольку каждый символ ввода соответствует шаблону регулярного выражения (.).Чтобы заменить точки, используйте этот шаблон: \. (или как строка Java: "\\.").

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