Ошибки с разделением строки - PullRequest
2 голосов
/ 25 января 2012

По какой-то причине я могу заставить метод split работать. Я, честно говоря, понятия не имею, что я делаю неправильно, этот код:

String address = "0.0.0.0";
String [] adr = address.split(".");
System.out.println(address);
System.out.println(adr[0]);

Я получаю ошибку индексации за пределами границ для метода доступа к массиву. Есть идеи, где я ошибся?

Ответы [ 3 ]

15 голосов
/ 25 января 2012

Метод split() ожидает регулярное выражение , а не литеральную строку, а "."Символ имеет особое значение в регулярных выражениях.Разделить на буквальное "."символ, вам нужно экранировать его, чтобы синтаксический анализатор регулярных выражений понимал, что это то, что вам нужно.

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

String [] adr = address.split("\\.");

Обратите внимание, что необходимо по существу экранировать его дважды, потому чтоВы хотите, чтобы синтаксический анализатор регулярных выражений получал строку "\.", которая фактически является "\\."когда выражено как строковый литерал.«\\» преобразуется в буквальный символ «\», поэтому синтаксическому анализатору регулярных выражений присваивается «\.», Который затем преобразуется в литерал «.»символ.

Также обратите внимание, что синтаксический анализатор stackoverflow, кажется, хочет удалить некоторые последовательности, начинающиеся с "\", что делает этот пост непонятным для редактирования.

4 голосов
/ 25 января 2012
String address = "0.0.0.0";
String [] adr = address.split("\\.");
System.out.println(address);
System.out.println(adr[0]);
3 голосов
/ 25 января 2012

"" является специальным символом в регулярных выражениях, а аргумент split является регулярным выражением. Побег это с. (т.е. "\\.").

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