Подсчет слов с использованием метода Scanner.next () - PullRequest
0 голосов
/ 08 марта 2019

В настоящее время я работаю над методом, который должен возвращать количество символов новой строки, слов и символов строки в массиве 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}.

1 Ответ

0 голосов
/ 08 марта 2019

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

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 для запуска в конце слова.

...