Подсчет слов с помощью метода Scanner.next()

В настоящее время я работаю над методом, который должен возвращать количество символов новой строки, слов и символов строки в массиве int[]. Я не понимаю, сколько раз запускается метод Scanner.next(). Я попытался использовать такой оператор if:

if (!(in.next() == (""))) { words++; }

но я получаю java.util.NoSuchElementException. Как мне обойти исключение NoSuchElementException и подсчитать токены, а не возвращать их? Вот что у меня есть до сих пор:

import java.util.Scanner;

public class WordCount {

/**
 * Scans a string and returns the # of newline characters, words, and
 * characters in an array object.
 * 
 * @param text string to be scanned
 * @return # of newline characters, words, and characters
 */
public static int[] analyze(String text) {
    // Variables declared
    Scanner in = new Scanner(text);
    int[] values = new int[3];
    int line = 0;
    int words = 0;
    int characters = 0;

    // Checks string for # of newlines, chars, and words
    for (int i = 0; i < text.length(); i++) {
        char n = text.charAt(i);

        if (n == '\n') {
            line++;
        }
        if (in.hasNext()) {
            characters++;
        }

        //this is where I think the word count statement should go

    }
    values[0] = line;
    values[1] = words;
    values[2] = characters;
    return values;
}

public static void main(String[] args) {
    analyze("This is\n a test sentence.");
}

Тест должен вернуть массив {1, 5, 25}.

Этот вопрос отклоняется, потому что он слишком широкий. Возьмите тур и прочитайте Как спросить и вернитесь позже.

RaminS 08.03.2019 20:20

Итак, вы заявили, что вы хотите, чтобы ваша программа делала, и вы показали нам, что вы сделали до сих пор, но на самом деле вы еще не задали вопрос по программированию. Вы не показали нам, что пробовали до сих пор, и не дали никаких указаний на то, на чем вы застряли. Какие проблемы специфический возникают при написании кода подсчета слов?

azurefrog 08.03.2019 20:22

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

Deven 08.03.2019 20:37
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
3
316
1

Ответы 1

Чтобы проверить количество слов в строке, вам нужно будет проверить, является ли следующий символ буквой. В то же время вам понадобится условие, чтобы проверить, является ли оно концом слова.

boolean isEndWord = false;
// Checks string for # of newlines, chars, and words
for (int i = 0; i < text.length(); i++) {
   char n = text.charAt(i);
   if ((!Character.isLetter(n))&&isEndWord == true) {
      words++;
      isEndWord = false;
   }
   if (n == ' ') {
      isEndWord = true;
   }
   if (n == '\n') {
       line++;
       isEndWord = true;
   }
   if (in.hasNext()) {
       characters++;
   }
}

Вы можете использовать логическое значение isEndWord для запуска всякий раз, когда слово заканчивается.

Другие вопросы по теме