首页 > 解决方案 > JAVA - 如何忽略所有包含非字母字母的单词

问题描述

我的程序使用 Scanner 读取 txt 文件,并使用 Scanner.next() 将其中的每个单词逐字保存在 ArrayList 中。在这里,任何包含非字母字母的单词都应该被忽略,意思根本不应该算作单词(而不是替换它们)。例如:“U2”、“基于数据”或“你好!” 根本不应该被计算在内。

我可以让它读取所有单词并将其保存到 ArrayList,但我坚持忽略包含非字母元素的单词。

这是我的部分代码:

public static void main(String[] args) {
    ArrayList<Word> wordList = new ArrayList<Word>();
    int wordCount = 0;
    Scanner input;

    try {
        System.out.println("Enter the file name with extension: ");
        input = new Scanner(System.in);
        File file = new File(input.nextLine());
        input.close();
        input = new Scanner(file);
        while(input.hasNext())
        {
            Word w = new Word(input.next().toLowerCase()); //should be case-insensitive
            if(!wordList.contains(w)) //equals method overriden in Word class
            wordList.add(w);
            else 
            {
                wordList.get(wordList.indexOf(w)).addCount();
            }
            wordCount++;
        }
        input.close();

Word 类是我定义的,只是一个简单的类,具有 word(String) 和 count(int) 属性。定义了 equals() 方法。

我认为正则表达式将是解决此问题的方法,但是由于我不确定如何在正则表达式中定义“非字母”(我不了解正则表达式),因此我无法定义固定范围..

任何帮助,将不胜感激!

标签: java

解决方案


您可以使用正则表达式^[a-zA-Z]*$仅匹配字母。在添加到您的ArrayList.

现在您可以使用.matches()String 类的 来检查它是否只包含字母。例如:

String str = "asd";
if (str.matches(^[a-zA-Z]*$)) {
   // only alphabets
} else {
   // something else
}

推荐阅读