Подсчет слов и строк с помощью сканера Scanner (Java) - PullRequest
0 голосов
/ 20 октября 2018

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

Я пытаюсь сделать довольно простую вещь, считая количество слови количество строк текста, заданного пользователем с помощью сканера (очевидно, с неизвестным количеством слов и строк), и, наконец, печать этих 2 чисел.Все это с использованием Java.

Пока я несколько дней пытался выполнить подсчет слов (так как после этого это было бы очень похоже на кодирование части строк).Я много чего пробовал, используя массивы, методы разбиения и т. Д. Теперь у меня есть этот код:

import java.util.Locale;
import java.util.Scanner;
import java.util.regex.Pattern;

public class WordCount {
     public static void main(String[] args) {

         int i=0;

         Scanner input = new Scanner(System.in).useLocale(Locale.US);

         while(input.hasNextLine()) {
            i++;
            input.next();
            }

         System.out.printf("%30s\n", "The text has " + i + " words");
     }
}

Это правильно подсчитывает слова в тексте, однако, поскольку цикл while никогда не заканчивается, онникогда не печатает общее количество слов и не будет продолжать работу со следующим кодом, когда я его напишу.

Может ли кто-нибудь помочь мне решить эту проблему?

Заранее спасибо!

Хорошего дня!

1 Ответ

0 голосов
/ 20 октября 2018

Я бы настроил ваш код следующим образом:

public static void main(String[] args) {
    Scanner input = new Scanner(System.in).useLocale(Locale.US);

    int lines = 0;
    int words = 0;

    String currLine = "?"; 
    while (currLine != null && currLine.trim().length() > 0) {
        currLine = input.nextLine();
        words = words + currLine.split("\\W+").length;
        lines++;
    }

    System.out.printf("%30s\n", "The text has " + (lines - 1) + " lines");
    System.out.printf("%30s\n", "The text has " + (words - 1) + " words");
    input.close();    
}
  • Нам нужно использовать переменную для хранения ввода, поэтому я использовал currLine для хранения каждой строки, введенной пользователем.
  • Переименуйте переменные в lines и word соответственно.
  • Используйте regex, чтобы разделить каждое слово, а затем вычислить длину массива и, наконец, сохранить его в словах.

Как только пользователь вводит пустую строку, программа завершает работу.

Вывод:

asd asd asd asd asd asd asd asd

Текст состоит из 1 строк

Текст состоит из 8 слов

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