如何扫描Java中的单词,不包括标点符号

时间:2011-10-03 19:51:16

标签: java parsing

我正在尝试使用scanner类来解析文件中的所有单词。该文件包含常见文本,但我只想删除所有文字。 我到目前为止的解决方案还不完整,但已经给我一些问题了:

Scanner fileScan= new Scanner(file);
String word;
while(fileScan.hasNext("[^ ,!?.]+")){       
    word= fileScan.next();
    this.addToIndex(word, filename);
}

现在,如果我在“喜欢我的名字是马里奥!”这样的句子中使用它。它只返回“hi”,“my”,“name”和“is”。它不匹配“马里奥!” (显然)但它不匹配“马里奥”,就像我认为的那样。

你能解释一下为什么会这样,并帮助我找到一个更好的解决方案吗? 谢谢

2 个答案:

答案 0 :(得分:4)

这有效:

import java.util。*;

class S {

    public static void main(String[] args) {
        Scanner fileScan= new Scanner("hi my name is mario!").useDelimiter("[ ,!?.]+");
        String word;
        while(fileScan.hasNext()){       
            word= fileScan.next();
            System.out.println(word);
        }

    } // end of main()
}


javac -g S.java && java S
hi
my
name
is
mario

答案 1 :(得分:0)

由于你想摆脱标点符号,你可以在添加到索引之前简单地替换所有标点符号:

word = word.replaceAll("\\{Punct}", "");

如果是超标或其他孤立的标点符号,您只需在添加前检查是否word.isEmpty()

当然,您必须摆脱自定义分隔符。