В настоящее время я работаю над методом, который должен возвращать количество символов новой строки, слов и символов строки в массиве 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}.
Итак, вы заявили, что вы хотите, чтобы ваша программа делала, и вы показали нам, что вы сделали до сих пор, но на самом деле вы еще не задали вопрос по программированию. Вы не показали нам, что пробовали до сих пор, и не дали никаких указаний на то, на чем вы застряли. Какие проблемы специфический возникают при написании кода подсчета слов?
Я только что обновил свой пост и попытался сделать его более конкретным, это моя первая публикация, поэтому я извиняюсь, если я был слишком широк или не задал правильных вопросов.




Чтобы проверить количество слов в строке, вам нужно будет проверить, является ли следующий символ буквой. В то же время вам понадобится условие, чтобы проверить, является ли оно концом слова.
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 для запуска всякий раз, когда слово заканчивается.
Этот вопрос отклоняется, потому что он слишком широкий. Возьмите тур и прочитайте Как спросить и вернитесь позже.