Я пытаюсь взять строковый ввод, разобрать каждое слово в нижнем регистре и распечатать каждое слово в строке (в отсортированном порядке), игнорируя не алфавитные символы (количество слов также учитывается).Итак,
Пример ввода:
Adventures in Disneyland
Two blondes were going to Disneyland when they came to a fork in the
road. The sign read: "Disneyland Left."
So they went home.
Вывод:
a
adventures
blondes
came
disneyland
fork
going
home
in
left
read
road
sign
so
the
they
to
two
went
were
when
Моя программа:
Scanner reader = new Scanner(file);
ArrayList<String> words = new ArrayList<String>();
while (reader.hasNext()) {
String word = reader.next();
if (word != "") {
word = word.toLowerCase();
word = word.replaceAll("[^A-Za-z ]", "");
if (!words.contains(word)) {
words.add(word);
}
}
}
Collections.sort(words);
for (int i = 0; i < words.size(); i++) {
System.out.println(words.get(i));
}
Это работает для ввода выше,но выводит неправильный вывод для такого ввода:
a t\|his@ is$ a)( -- test's-&*%$#-`case!@|?
Ожидаемый вывод должен быть
a
case
his
is
s
t
test
Вывод, который я получаю,
*a blank line is printed first*
a
is
testscase
this
Итак,Моя программа, очевидно, не работает, так как scanner.next () принимает символы, пока не достигнет пробела, и считает, что это строка, тогда как все, что не является буквой, должно рассматриваться как разрыв между словами.Я не уверен, как мне удастся манипулировать методами сканера, чтобы разрывы считались не алфавитными символами, а не пробелами, поэтому я застрял прямо сейчас.