检查单词是否包含数字或特殊字符

时间:2015-12-23 01:08:35

标签: java regex

我正在编写一个程序来计算文本文件中有效英语单词的总数。在这段代码中,我想忽略包含数字/数字或特殊字符的单词,例如“word123”,“123word”,“word&&”,“$ name”。目前我的程序检测以数字开头的单词,例如“123number”。但是无法检测到“number123”。任何人都可以告诉我应该如何前进?以下是我的代码:

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;
}

2 个答案:

答案 0 :(得分:2)

丢掉点:

String regex = "[a-zA-Z]*"; // more correctly "[a-zA-Z]+", but both will work here

点表示“任何字符”,但您想要一个正则表达式“仅由字母组成”。

顺便说一下,您也可以使用POSIX表达式更简洁地表达(尽管可以说是不太可读):

String regex = "\\p{L}+";

正则表达式\p{L}表示“任何字母”。

扩展表达式以包含可以在开头出现的撇号,例如'tis,中间例如can't或结束例如Jesus',但不超过一次:

String regex = "(?!([^']*'){2})['\\p{L}]+";

答案 1 :(得分:1)

使用正则表达式 ^ [a-zA-Z - ] + $ 进行单词匹配。

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;

}