Нужен какой-то компактный код для подсчета количества строк в строке в Java. Строка должна быть разделена на
или
. Каждый экземпляр этих символов новой строки будет рассматриваться как отдельная строка. Например,
должен вернуться 4. Прототип
Может ли кто-нибудь предоставить компактный набор инструкций? Думаю, у меня есть решение, но это слишком долго. Спасибо.
Как насчет этого:
Таким образом, вам не нужно разделить String на множество новых объектов String, которые позже будут очищены сборщиком мусора. (Это происходит при использовании String.split(String); ).
Очень простое решение, которое не создает объекты String, массивы или другие (сложные) объекты, заключается в следующем:
Обратите внимание, что если вы используете другие терминаторы EOL, вам нужно немного изменить этот пример.
Если у вас есть строки из файла уже в строке, вы можете сделать это:
На всякий случай вам когда-либо понадобится прочитать содержимое из файла (я знаю, что вы сказали, что нет, но это для будущей справки), я рекомендую использовать Apache Commons, чтобы прочитать содержимое файла в строке. Это отличная библиотека и множество других полезных методов. Вот простой пример:
Это более быстрая версия:
Ну, это решение, не использующее никаких «магических» регулярных выражений или других сложных функций sdk.
Очевидно, что помощник регулярных выражений, вероятно, лучше использовать в реальной жизни, так как его быстрее писать. (И это, вероятно, ошибка тоже. )
С другой стороны, вы должны понимать, что происходит здесь.
Если вы хотите обрабатывать случай
как одну новую строку (соглашение msdos), вы должны добавить свой собственный код. Подсказка: вам нужна другая переменная, которая отслеживает предыдущий символ, сопоставленный.
В библиотеке Java I/O присутствует полезный класс, который предназначен для работы со строками текстового файла: LineNumberReader . В частности, если в цикле вызывать метод LineNumberReader.readLine() , то можно легко посчитать общее число строк в текстовом файле.
Под строкой в текстовом файле подразумевается строка, которая заканчивается:
- символом перевода строки (line feed)‘n’;
- или символом возврата каретки (carriage return)‘r’.
нужен компактный код для подсчета количества строк в строку в Java. Строка должна быть разделена на
или
. Каждый экземпляр этих символов новой строки будет рассматриваться как отдельная линия. Например —
должен возвращать 4. Прототип
может ли кто-нибудь предоставить компактный набор утверждений? Я нашел решение здесь, но это слишком долго, я думаю. Спасибо.
15 ответов
Как насчет этого:
таким образом, вам не нужно разбивать строку на множество новых объектов String, которые будут очищены сборщиком мусора позже. (Это происходит при использовании String.split(String); ).
очень простым решением, которое не создает строковые объекты, массивы или другие (сложные) объекты, является использование следующего:
обратите внимание, что если вы используете другие Терминаторы EOL, вам нужно немного изменить этот пример.
Если у вас есть строки из файла уже в строке, вы могли бы сделать это:
EDIT:
на всякий случай, если вам когда-нибудь понадобится прочитать содержимое файла (я знаю, что вы сказали, что нет, но это для дальнейшего использования), я рекомендую использовать Apache Commons для чтения содержимого файла в строку. Это отличная библиотека и имеет много других полезных методов. Вот простой пример:
Это более быстрая версия:
Если вы используете Java 8, то:
(+1 в конце подсчитать последнюю строку, если строка обрезается)
одна линия решение
количество строк = countLineEndings (str) + 1
С JDK / 11 вы можете сделать то же самое, используя String.lines() API следующим образом:
в документе API указано следующее в качестве его части для описания: —
Ну, это решение, не использующее никаких» магических » регулярных выражений или других сложных функций sdk.
очевидно, regex matcher, вероятно, лучше использовать в реальной жизни, так как его быстрее писать. (И это, вероятно, ошибка бесплатно тоже. )
С другой стороны, вы должны понимать, что здесь творится.
Если вы хотите обработать case
как одну новую строку (MSDOS-convention), вы должны добавить свой собственный код. Подсказка, вам нужна другая переменная, которая отслеживает совпадение предыдущего символа.
обратите внимание, что это не будет считать пустые строки (
).
CRLF (
) считается разрывом одной строки.
вы также можете сделать
для использования символа(ов) разделителя строк по умолчанию.
этот метод выделит массив символов, его следует использовать вместо итерации по строке.length() as length () использует количество символов Юникода, а не символов.
это будет считать последнюю строку, если она не заканчивается на cr / lf cr lf
Я предлагаю вам искать что-то подобное
Если у вас возникли проблемы, опубликуйте свой код
Источник: