Как получать общее количество пустых линий Текста в Android?

Я получаю текст одного EditText или Вы уезжаете, мне хотелось бы получать общее количество пустых линий, а именно

Lorem impsum
Lorem impsum

Lorem impsum

Прыжок линии, Вы содержите \n

Как возможно получать общее количество пустых линий, самой работоспособной формы, если возможно?

Также Вы были бы интересными, что, если пустая линия содержала пространство в мишени, табуляторе, который в простой вид не воспринимается. Я предполагаю, что реализовывать процесс линию из-за линии предусмотрело, и реализовывать один trim будут удалены пространства и табуляторы.

Результаты Benchmark

Локон 10000 интерстремянных ремней.

  • Решение Пол ты бродишь: 845ms
  • Решение SO: 484ms
  • Решение Luiggi Мендоса: 84ms
4
задан 24.06.2016, 18:57
4 ответа

Основанный на предыдущий ответ podrГ-хозяев получать nГєmero lГ-neas vacГ-схвати:

String cadena = " ....... ";
int contadorLineasVacias = 0;
int indice = cadena.indexOf("\n");
//mientras se encuentren saltos de línea
while (indice >= 0) {
    int base = indice;
    int ifinal = cadena.indexOf("\n", indice + 1);
    if (ifinal < 0) {
        break; //no se encontró nuevo salto de línea, detener
    }
    boolean vacio = true;
    for (int i = base + 1; i < ifinal; i++) {
        if (!esCaracterVacio(cadena.charAt(i))) {
            vacio = false;
            break; //detener el for
        }
    }
    if (vacio) {
        contadorLineasVacias++;
    }
    indice = ifinal;
}

Это нуждается одного mГ©todo в esCaracterVacio(char), который может быть осуществленным как остается:

public static boolean esCaracterVacio(char c) {
    return c == ' ' || c == '\0' || c == '\t'; //agregar otros caracteres que consideres vacíos
}
3
ответ дан 24.11.2019, 14:05
  • 1
    Я только что попытался ты c и # 243; я говорю, что мне кажется, что оно не функционирует, он остается в бесконечном цикле и в линии if (! лишен один) – Webserveis 24.06.2016, 14:23
  • 2
    @Webserveis Исправленный –  24.06.2016, 18:52
  • 3
    Твой м и # 233; все м и # 225; s r и # 225; я прошу, n спроси это \0, что я увидел несколько раз, которые это? – Webserveis 24.06.2016, 18:58
  • 4
    @Webserveis - характер vac и # 237; или, характер со стоимостью 0 unicode или Американский стандартный код обмена информацией. Например, если в Windows ты используешь combinaci и # 243; n Alt + 64 выходит у тебя, если ты используешь Alt + 0 выходит у тебя \0. В таких языках как C/C ++. этот характер используется как конец цепи текста, но это не применяется к языкам как Java. –  24.06.2016, 18:59

Понимая, что у тебя есть текст в переменной x исходя из следующего:

Lorem Ipsum is simply dummy text of the printing and typesetting industry.\n
                                  \n
1500s, when an unknown printer took a galley of type and scrambled it to\n 
make a type specimen book. It has survived not only five centuries, but also\n 
\n 
was popularised in the 1960s with the release of Letraset sheets containing\n 
               \n
like Aldus PageMaker including versions of Lorem Ipsum.\n

у Нас Есть линии с пространствами в мишени (то, что прекращает быть пустой линией) , я думаю, что твоя проблема podrГ, - чтобы решать следующего способа:

String X = " .. "; // Aquí todo el texto que pusimos arriba (ejemplo)
int i = 0; 
int LineasVacias = 0;

while (i + 1 != X.length())
{
    if (X[i] == '\n' && X[i + 1] == '\n') {
        ++LineasVacias; // Si se encuentra que el siguiente caracter está vacio, se incrementa.
        i += 2; continue; // Se salta el siguiente salto de lineay seguimos el bucle.
    }
    else if (X[i] == ' ' && X[i + 1] == ' ') {
        // Si el caracter actual + el siguiente es un espacio en blanco...
        while (X[i] == ' ') ++i; // Se incrementa i, saltando el espacio..
        if (X[i] == '\n') ++LineasVacias;
    }
    ++i;
}

, Если это одна soluciГіn немного грязная и не портативная, но оно я функционировало. Тебе оставил fiddle (C#) для того, чтобы ты видел.

2
ответ дан 24.11.2019, 14:05

aquГ - одна soluciГіn, что включает использование одной expresiГіn регулировать:

String text = "Lorem impsum\n \nLorem impsum\n \nLorem impsum";
Matcher matcher = Pattern.compile("(?m)^[\\t ]*$").matcher(text);
int count = 0;
while(matcher.find()) {
    count++;
}
System.out.println(count);
2
ответ дан 24.11.2019, 14:05

Из-за SO я нашел другой способ меня делает это

public static int countEmptyLines(String str) {
    final BufferedReader br = new BufferedReader(new StringReader(str));
    String line;
    int empty = 0;
    try {
        while ((line = br.readLine()) != null) {
            if (line.trim().isEmpty()) {
                ++empty;
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return empty;
}
1
ответ дан 24.11.2019, 14:05
  • 1
    #191; Ловить одну IOException после того, как быть читая цепь? – Paul Vargas 23.06.2016, 00:22
  • 2
    Android Studio помечал это мне как " warning" и сделав alt+intro, он рекомендует меня try catch – Webserveis 23.06.2016, 00:23
  • 3
    @PaulVargas - checked exception, ты должен манипулировать ею. –  23.06.2016, 01:00