Часто при парсинге данных мы разбиваем строку по разделителю. Один из способов - это использование функции
split(regex), где regex - это регулярное выражение. Разобъем следующую строку на части:
Java World|0123456|false
Очень часто разделителем выступает вертикальная черта
|, т.к. в функция
split принимает регулярное выражение, а символ
| (pipe) используется в регулярных выражениях для задания условия "или", то этот символ нужно экранировать. Разбить строку можно следующим кодом:
"Java World|0123456|false".split("\\|")
На первый взгляд кажется, что все будет работать без проблем. Возможно, это будет и так, но допустим вам попадется строка, в которой разделитель стоит в конце строки:
Java World|0123456|
Если разбить эту строку:
"Java World|0123456|".split("\\|")
Вы в своем коде можете ожидать массив из трех элементов: "Java World", "0123456", "".
Но массив будет содержать два элемента: "Java World", "0123456", потому что разделитель, стоящий в конце строки игнорируется.
Для того, чтобы последний разделитель не игнорировался нужно в функцию
split, передать вторым параметром
-1.
У
split есть еще одна сигнатура вида: split(regex,limit), где параметр
limit означает максимальное кол-во элементов в итоговом массиве. Примеры использования:
"Java World|0123456|".split("\\|",1)
//вернет одну строку, игнорируя разделители: "Java World|0123456|"
"Java World|0123456|".split("\\|",2)
//вернет две строки, игнорируя все разделители, кроме первого: "Java World", "0123456|"
"Java World|0123456|".split("\\|",5)
//вернет три строки - максимально возможное разбиение строки,
//хотя мы пытались разбить строку на 5 частей: "Java World", "0123456", ""
На самом деле метод
split(regex) вызывает
split(regex,0), т.е. limit равен
0, и функция ведет себя так, как описано в начале статьи.
Если передать параметр limit, равный -1 (или любое отрицательное число), то разделитель в конце строки не игнорируется:
"Java World|0123456|".split("\\|",-1)
//вернет три строки: "Java World", "0123456" и ""
Заключение:
На практике очень часто приходится пользоваться
split(regex), но не нужно забывать и про
split(regex,-1).
Что касается использования
split(regex,limit) при
limit > 0, то я не представляю, где это может пригодиться, и, думаю, используется это очень редко.