Почему функция split ведет себя так, как в java?
если я это сделаю
String a = ""
String b = a.split(" ")[0];
Он не дает ArrayIndexOutOfBoundException
но когда я это делаю
String a = " "
String b = a.split(" ")[0];
Это дает мне ArrayIndexOutOfBoundException
снова, когда я делаю
String a = " abc"
String b = a.split(" ")[0];
Это не дает мне исключение
ПОЧЕМУ ТАК?
Ответы
Ответ 1
Это странно.
Вещь в первом примере пустая строка "является строкой, а не нулевой. Поэтому, когда вы говорите: разделите это" "на токен", шаблоны не совпадают, и массив, который вы получаете, является исходной строкой. Точно так же, как если бы вы делали
String a = "abc";
String b = a.split(" ")[0];
Шаблон для разделения не соответствует, поэтому вы получаете один токен, исходную строку.
Вы получаете исключение во втором случае, потому что COMPLETE-контент вашей String - это точно разделитель, который вы передали в split, поэтому вы получаете пустой массив.
Сообщите мне, если вы хотите получить дополнительную информацию, но это в значительной степени.
Ответ 2
После:
String a = " "
String[] arr = a.split(" ");
arr
- пустой массив. Именно поэтому он бросает ArrayIndexOutOfBoundsException
при попытке получить доступ к своему первому (и несуществующему) элементу. Теперь, после:
String a = " abc"
String[] arr = a.split(" ");
arr
имеет один элемент: "abc"
, поэтому исключение не возникает при попытке получить доступ к его первому элементу.
Ответ 3
Случай №1
String a = ""
String b = a.split(" ")[0];
Из Javadoc:
Если выражение не соответствует какой-либо части ввода, тогда результирующий массив имеет только один элемент, а именно эту строку.
So split()
дает вам одноэлементный массив, состоящий из входной строки (""
). Поэтому нет исключения.
Случай №2
String a = " "
String b = a.split(" ")[0];
Из Javadoc:
Таким образом, конечные пустые строки не включаются в массив.
У вас есть две такие конечные пустые строки, и больше ничего. Поэтому вы возвращаете массив нулевого размера, что приводит к исключению.
Случай №3
String a = " abc"
String b = a.split(" ")[0];
Это не очень многоугольный случай, поскольку он явно должен возвращать хотя бы один элемент, следовательно, не является исключением.
Ответ 4
Строка a = ";
Строка b = a.split(" ") [0];
Когда вы это делаете, поскольку нет символа "split", поэтому не выполняется действие split, и массив возвращается с первым и единственным элементом в виде пустой строки.
Строка a = ";
Строка b = a.split(" ") [0];
в то время как в этом случае он пытается разбить строку, но не получает значений, которые должны быть размещены в любой из сторон, поэтому массив не создается. таким образом, когда вы пытаетесь получить доступ к своему 0-му элементу, он предоставляет ArrayOutOfBoundException.
Строка a = "abc";
Строка b = a.split("") [0];
В этом случае происходит разделение, и "abc" помещается на 0-е место (я думаю), и вы остаетесь с массивом с размером больше 0. Проблема решена!!.
Ответ 5
Всегда возможно, что String.split()
вернет пустой массив, если есть полное соответствие предоставленного regex