我必须从文件中读取文字。例如,句子可能是
Bill's favorite animal is a dog. He is buying one at 1:30.
我只需要单词,但不是删除撇号,而是取消1:30
。对此的期望输出将开始:
代码:
Scanner scanner = null;
Pattern pattern=Pattern.compile("[^\\w+]");
String word;
try{
scanner=new Scanner(file);
}catch(FileNotFoundException e){
System.out.println("Can't Find the File in Dictionary class!");
}
time=System.nanoTime();
while(scanner.hasNext()){
scanner.useDelimiter(pattern);
word=scanner.next();
System.out.println(word);
if(!word.equals("")){
dictionary.add(word);
}
}
我尝试过使用分隔符,但这会导致Bill
和s
分隔在没有'
的单独行上。我希望能够使用
scanner.next(Pattern.compile("[^\\w+]));
但是当我尝试时,我得到一个InputMismatchException。希望有人能帮忙解决这个问题!谢谢!
答案 0 :(得分:0)
模式"[^\\w+]"
错误。它匹配任何不是字母,数字,下划线或加号的字符。这里的加号不是量词,所以如果您的示例文本包含" Bill得到A +"它会找到"比尔","得到",""和" A +"。这是你想要的吗?您似乎更有可能编写"[^\\w]+"
,这会在存在分隔符字符时从结果中消除空字符串。
您似乎可以将撇号添加到模式中。如果我们也移动了迷路加号,那么会产生"[^\\w']+"
的模式,但是,当它更接近时,它仍然包含数字,因此您将得到" 1"和" 30"作为来自" 1:30"。
我认为你真正想要的是"[^\\p{Alpha}']+"
,它将使用一个或多个不是字母或撇号的字符作为分隔符,因此匹配所有字母和撇号作为标记。输出将是以下标记: