Подсчитайте количество строк в строке Java - PullRequest
45 голосов
/ 17 мая 2010

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

"Hello\nWorld\nThis\nIs\t"

должен вернуть 4. Прототип -

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

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

Ответы [ 15 ]

74 голосов
/ 17 мая 2010
private static int countLines(String str){
   String[] lines = str.split("\r\n|\r|\n");
   return  lines.length;
}
25 голосов
/ 17 мая 2010

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

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

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

15 голосов
/ 15 сентября 2013

Очень простое решение, которое не создает объекты String, массивы или другие (сложные) объекты, заключается в использовании следующего:

public static int countLines(String str) {
    if(str == null || str.isEmpty())
    {
        return 0;
    }
    int lines = 1;
    int pos = 0;
    while ((pos = str.indexOf("\n", pos) + 1) != 0) {
        lines++;
    }
    return lines;
}

Обратите внимание, что если вы используете другие терминаторы EOL, вам необходимонемного измените этот пример.

10 голосов
/ 17 мая 2010

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

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;
}
7 голосов
/ 06 ноября 2014

Я использую:

public static int countLines(String input) throws IOException {
    LineNumberReader lineNumberReader = new LineNumberReader(new StringReader(input));
    lineNumberReader.skip(Long.MAX_VALUE);
    return lineNumberReader.getLineNumber();
}

LineNumberReader находится в пакете java.io: https://docs.oracle.com/javase/7/docs/api/java/io/LineNumberReader.html

4 голосов
/ 12 января 2018

Если вы используете Java 8, тогда:

long lines = stringWithNewlines.chars().filter(x -> x == '\n').count() + 1;

(+ 1 в конце - считать последнюю строку, если строка обрезана)

Решение с одной линией

3 голосов
/ 31 мая 2018

С JDK / 11 вы можете сделать то же самое, используя API String.lines() следующим образом:

String sample = "Hello\nWorld\nThis\nIs\t";
System.out.println(sample.lines().count()); // returns 4

Документ API гласит следующее какчасть его для описания: -

Returns:
the stream of lines extracted from this string
3 голосов
/ 06 февраля 2012

Это более быстрая версия:

public static int countLines(String str)
{
    if (str == null || str.length() == 0)
        return 0;
    int lines = 1;
    int len = str.length();
    for( int pos = 0; pos < len; pos++) {
        char c = str.charAt(pos);
        if( c == '\r' ) {
            lines++;
            if ( pos+1 < len && str.charAt(pos+1) == '\n' )
                pos++;
        } else if( c == '\n' ) {
            lines++;
        }
    }
    return lines;
}
1 голос
/ 02 июня 2017

Попробуйте это:

public int countLineEndings(String str){

    str = str.replace("\r\n", "\n"); // convert windows line endings to linux format 
    str = str.replace("\r", "\n"); // convert (remaining) mac line endings to linux format

    return str.length() - str.replace("\n", "").length(); // count total line endings
}

количество строк = countLineEndings (str) + 1

Привет :)

0 голосов
/ 05 августа 2018
//import java.util.regex.Matcher;
//import java.util.regex.Pattern;

private static Pattern newlinePattern = Pattern.compile("\r\n|\r|\n");

public static int lineCount(String input) {
    Matcher m = newlinePattern.matcher(input);
    int count = 0;
    int matcherEnd = -1;
    while (m.find()) {
        matcherEnd = m.end();
        count++;
    }
    if (matcherEnd < input.length()) {
        count++;
    }

    return count;
}

Это будет считать последнюю строку, если она не заканчивается в cr / lf cr lf

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