我正在尝试使用scanner类来解析文件中的所有单词。该文件包含常见文本,但我只想删除所有文字。 我到目前为止的解决方案还不完整,但已经给我一些问题了:
Scanner fileScan= new Scanner(file);
String word;
while(fileScan.hasNext("[^ ,!?.]+")){
word= fileScan.next();
this.addToIndex(word, filename);
}
现在,如果我在“喜欢我的名字是马里奥!”这样的句子中使用它。它只返回“hi”,“my”,“name”和“is”。它不匹配“马里奥!” (显然)但它不匹配“马里奥”,就像我认为的那样。
你能解释一下为什么会这样,并帮助我找到一个更好的解决方案吗? 谢谢
答案 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()
。
当然,您必须摆脱自定义分隔符。