split(delimiter)
по умолчанию удаляет завершающие пустые строки из массива результатов. Чтобы отключить этот механизм, нам нужно использовать перегруженную версию split(delimiter, limit)
с limit
отрицательным значением, например
String[] split = data.split("\\|", -1);
Немного подробнее:
split(regex)
внутренне возвращает результат split(regex, 0)
и в документации этого метода вы можете найти (выделено мое)
limit
Параметр контролирует количество раз применяется шаблон и , следовательно , влияет на длину результирующего массива.
Если предел n
составляет больше нуля , то шаблон будет применен не более п - 1 раз, длина массива будет не больше , чем п, а последняя запись массива будет содержать все входные данные за пределами последнего согласованного разделителя.
Если n
это не положительно, то шаблон будет применяться столько раз, сколько возможно, и массив может иметь любую длину.
Если n
есть ноль , то шаблон будет применен столько раз , сколько это возможно, массив может иметь любую длину, и конечные пустые строки будут отброшены .
Исключение :
Стоит отметить, что удаление завершающей пустой строки имеет смысл, только если такая пустая строка создается с помощью механизма разделения . Так "".split(anything)
как мы не можем разделить ""
дальше, мы получим [""]
массив результатов .
Это происходит потому, что разделение здесь не произошло, поэтому ""
несмотря на то, что оно пустое, а конечный символ представляет собой исходную строку, а не пустую строку, созданную в процессе разделения.
data.split("\\|", 8)
split("\\|", 8)
потому что это ограничивает первые восемь токенов! Если ваша строка является переменной, вы должны использовать ееsplit("\\|", -1)
так, чтобы она создавала неограниченное количество токенов и не сбрасывала пустые токены в конце.split(regex)
. Они оказались здесь и узнали, что это не так.Из документации
String.split(String regex)
:Таким образом, вам придется использовать версию
String.split(String regex, int limit)
с двумя аргументами с отрицательным значением:Doc:
Это не пропустит ни одного пустого элемента, включая завершающие.
источник
Из String.split () API Doc :
Перегруженный String.split (regex, int) больше подходит для вашего случая.
источник
String[] split = data.split("\\|",-1);
Это не фактическое требование во все времена. Недостаток выше показан ниже:
Когда данные отсутствуют:
Реальное требование - длина должна быть 7, хотя данные отсутствуют. Потому что есть случаи, например, когда мне нужно вставить в базу данных или что-то еще. Мы можем достичь этого, используя подход ниже.
То, что я сделал здесь, я удаляю "|" труба в конце, а затем разделить строку. Если у вас есть "," в качестве разделителя, то вам нужно добавить ", $" внутри replaceAll.
источник
у вас может быть несколько разделителей, включая пробельные символы, запятые, точки с запятой и т. д., используйте разделители в повторяемой группе с [] +, например
у вас будет 4 жетона - a, b, c, d
ведущие разделители в исходной строке должны быть удалены перед применением этого разделения.
в качестве ответа на заданный вопрос:
пробелы добавляются на всякий случай, если вы будете использовать их как разделители вместе с |
источник