В Java часто встречается задача разделения строки на части с использованием определенного символа или последовательности символов в качестве разделителя. Для этой цели обычно используется метод split()
, который принимает в качестве аргумента разделитель.
String str = "Hello.World"; String[] parts = str.split("."); // ожидается ["Hello", "World"], но это не так
Проблема в том, что в данном случае метод split()
не работает так, как ожидалось, и вместо разделения строки на две части «Hello» и «World», он возвращает пустой массив. При попытке обратиться к элементу этого массива возникает исключение ArrayIndexOutOfBoundsException
.
Причина этого поведения заключается в том, что аргумент, передаваемый в метод split()
, интерпретируется как регулярное выражение, а в регулярных выражениях символ «.» имеет специальное значение — он означает «любой символ». Таким образом, в приведенном выше примере строка разделяется по каждому символу, а так как вызов split(".")
возвращает массив, состоящий из пустых строк, при попытке обратиться к первому элементу массива возникает исключение.
Если же требуется разделить строку по символу «.», то его следует «экранировать», то есть сделать так, чтобы он воспринимался как обычный символ, а не как специальный символ регулярного выражения. Для этого перед «.» ставится двойной обратный слэш «\».
String str = "Hello.World"; String[] parts = str.split("\\."); // теперь работает правильно: ["Hello", "World"]
Таким образом, при работе с методом split()
важно помнить, что его аргумент интерпретируется как регулярное выражение, и учитывать это при выборе разделителя.
Добавить комментарий