Я пишу программу для подсчета количества действительных английских слов в текстовом файле. В этом коде я хочу игнорировать слова, содержащие числа/цифры или специальные символы, например «word123», «123word», «word & &», «$ name». В настоящее время моя программа обнаруживает слова, начинающиеся с цифр, например «123number». Однако не удается обнаружить «номер123». Может ли кто-нибудь сказать мне, как мне двигаться дальше? Ниже мой код:проверить, содержит ли слово число или специальный символ
public int wordCounter(String filePath) throws FileNotFoundException{
File f = new File(filePath);
Scanner scanner = new Scanner(f);
int nonWord = 0;
int count = 0;
String regex = "[a-zA-Z].*";
while(scanner.hasNext()){
String word = scanner.next();
if(word.matches(regex)){
count++;
}
else{
nonWord++;
}
}
return count;
}
В настоящее время ваше регулярное выражение ищет альфа с последующим любым количеством символов. Я подозреваю, что вы хотите, чтобы он искал один или несколько альфов. Это будет '' [a-zA-Z] + "или более явно' '\\ p {Alpha} +" '. – sprinter
Возможно, вам также потребуется изменить разделитель для сканера. По умолчанию оно соответствует пробелам. Вы, вероятно, нуждаетесь в этом, чтобы соответствовать пунктуации, а в противном случае это будет включено в слова. Я рекомендую 'scanner.useDelimiter (" \\ p {Punct} | \\ p {пробел} ");' – sprinter