Считайте количество строк в Строке Java

Нужен некоторый компактный код для подсчета количества строк в строке в Java. Строка должна быть разделена \r или \n. Каждый экземпляр тех символов новой строки рассмотрят как отдельную строку. Например -

"Hello\nWorld\nThis\nIs\t"

должен возвратиться 4. Прототип

private static int countLines(String str) {...}

Кто-то может обеспечить компактный набор операторов? У меня есть решение в здесь, но это слишком длинно, я думаю.Спасибо.

47
задан Naman 15 July 2018 в 07:33
поделиться

7 ответов

private static int countLines(String str){
   String[] lines = str.split("\r\n|\r|\n");
   return  lines.length;
}
75
ответ дан 26 November 2019 в 19:16
поделиться

Я предлагаю вам поискать что-то вроде этого

String s; 
s.split("\n\r");

Найдите здесь инструкции для метода разделения строк Java

Если у вас возникли проблемы, отправьте свой код

-2
ответ дан 26 November 2019 в 19:16
поделиться
"Hello\nWorld\nthis\nIs\t".split("[\n\r]").length

Вы также можете использовать

"Hello\nWorld\nthis\nis".split(System.getProperty("line.separator")).length

, чтобы использовать системные символы разделителя строк по умолчанию.

0
ответ дан 26 November 2019 в 19:16
поделиться

Если строки из файла уже записаны в строку, вы можете сделать следующее:

int len = txt.split(System.getProperty("line.separator")).length;

EDIT:

На случай, если вам когда-нибудь понадобится прочитать содержимое файла (я знаю, вы сказали, что не читали, но это на будущее), я рекомендую использовать Apache Commons для чтения содержимого файла в строку. Это отличная библиотека, в которой есть много других полезных методов. Вот простой пример:

import org.apache.commons.io.FileUtils;

int getNumLinesInFile(File file) {

    String content = FileUtils.readFileToString(file);
    return content.split(System.getProperty("line.separator")).length;
}
10
ответ дан 26 November 2019 в 19:16
поделиться

Что ж, это решение, в котором не используются «волшебные» регулярные выражения или другие сложные функции SDK.

Очевидно, что сопоставление регулярных выражений, вероятно, лучше использовать в реальной жизни, так как его быстрее писать. (И это, вероятно, тоже без ошибок ...)

С другой стороны, вы должны понимать, что здесь происходит ...

Если вы хотите обрабатывать случай \ r \ n как единый new-line (msdos-Convention) вам нужно добавить свой собственный код. Подсказка, вам нужна другая переменная, которая отслеживает предыдущий совпавший символ ...

int lines= 1;

for( int pos = 0; pos < yourInput.length(); pos++){
    char c = yourInput.charAt(pos);
    if( c == "\r" || c== "\n" ) {
        lines++;
    }
}
0
ответ дан 26 November 2019 в 19:16
поделиться

Как насчет этого:

String yourInput = "...";
Matcher m = Pattern.compile("\r\n|\r|\n").matcher(yourInput);
int lines = 1;
while (m.find())
{
    lines ++;
}

Таким образом, вам не нужно разделять String на множество новых объектов String, которые будут очищены сборщиком мусора позже. (Это происходит при использовании String.split(String); ).

25
ответ дан 26 November 2019 в 19:16
поделиться
new StringTokenizer(str, "\r\n").countTokens();

Обратите внимание, что при этом не будут учитываться пустые строки (\n\n).

CRLF (\r\n) считается как разрыв строки.

0
ответ дан 26 November 2019 в 19:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: