проблема replaceAll () - PullRequest
       19

проблема replaceAll ()

0 голосов
/ 27 января 2010

Я написал следующую строку кода:

str.replaceAll("xxx(ayyy)xxx", "$1".substring(0,1).equals("a") ? "a" : "b");

Но я обнаружил, что "$ 1" .substring (0,1) будет выводить "$" вместо "a". Есть ли способ решить эту проблему?

Ответы [ 3 ]

3 голосов
/ 27 января 2010

Второй параметр replaceAll является обычной строкой.

Java будет оценивать ваш параметр перед передачей его в функцию, а не для каждого совпадения.
"$1".substring(0,1) просто возвращает первый символ в строке $1.

Вам необходимо вызвать метод appendReplacement класса Matcher в цикле.

3 голосов
/ 27 января 2010

Если вы хотите применить различные замены для каждого матча, используйте appendReplacement / appendTail:

Pattern p = Pattern.compile("xxx(ayyy)xxx");
StringBuffer out = new StringBuffer();
Matcher m = p.matcher("...");
while (m.find()) {
    m.appendReplacement(out, m.group(1).substring(0, 1).equals("a") ? "a" : "b");
}
m.appendTail(out);
0 голосов
/ 27 января 2010
Подстрока

(начало, конец) даст вам подстроку от начала до конца до конца. Если вы хотите удалить первый элемент, попробуйте substring (1, lengthOfString)

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