Java: Понимание метода String replaceAll () - PullRequest
4 голосов
/ 04 марта 2011

Я ищу, чтобы выяснить ответ на эту проблему здесь.

Во-первых,

blah[abc] = blah[abc].replaceAll("(.*) (.*)", "$2, $1");

Может кто-нибудь объяснить мне, что (. *), $ 2 и $ 1are?

Во-вторых, когда я вкладываю это в оператор for для обращения к двум частям строки, я сталкиваюсь с ошибкой исключения.Мне было интересно, если кто-нибудь знал, почему это так.

Спасибо

Редактировать: Это ошибка, которую я получаю

Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 1 at ChangeNames.main (ChangeNames.java:21)

Ответы [ 2 ]

10 голосов
/ 04 марта 2011

(. *) - шаблон, соответствующий любому количеству символов.Скобки будут помечать его как подшаблон (для обратной ссылки).

$ 2 & $ 1 - это обратные ссылки.Это будут вещи, совпадающие с вашим вторым и первым вложенным шаблоном.

В основном replaceAll ("(. ) (. )", "$ 2, $ 1") найдет символы, разделенные пробелом, затем добавьте запятую перед пробелом, в дополнение к переворачиванию частей.Например:

a b => b, a
Hello world => Hellw, oorld

Не уверен насчет вложения ... Можете ли вы опубликовать код, который вы используете?

0 голосов
/ 04 марта 2011

Ваше регулярное выражение "(.) (.)" Будет таким: "(x) (y)", оно будет заменено на "$ 2, $ 1.

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