У меня есть регулярное выражение «[\r\n\f]+», чтобы найти количество строк, содержащихся в строке. Мой код такой:
pattern = Pattern.compile("[\\r\\n\\f]+")
String[] lines = pattern.split(texts);
В моем модульном тесте у меня есть образцы строк, подобные этим:
"\t\t\t \r\n \n"
"\r\n"
Результат синтаксического анализа первой строки равен 2, однако он становится равным 0 при синтаксическом анализе второй строки.
Я думал, что вторая строка включает 1 строку, хотя строка «пустая» (предположим, я редактирую файл, начинающийся с «\ r \ n» в текстовом редакторе, следует ли помещать курсор во вторую строку?). Является ли мое регулярное выражение неправильным для синтаксического анализа строк? или я что-то пропустил здесь?
Изменить:
Думаю, я сделаю вопрос более очевидным:
Почему
// notice the trailing space in the string
"\r\n ".split("\r\n").length == 2 // results in 2 strings {"", " "}. So this block of text has two lines.
но
// notice there's no trailing space in the string
"\r\n".split("\r\n").length == 0 // results in an empty array. Why "" (empty string) is not in the result and this block of text contains 0 lines?