我希望能够将文本文件中的文本提取为标记 - 例如,假设我有一个包含该句子的文本文件:
这是一家不错的餐厅,
相信我!我想将其内容提取为'令牌' - 例如,一个令牌将是“它”,下一个令牌将是“”,之后的那个将是“a”,然后是“”,然后“好”,然后是“餐馆”,然后是“,”和“\ n”,然后是“相信”,“”,“我”,“!”。所以我猜一种方法就是令牌是单词或不单词。
这是我到目前为止所做的事情(我检查该令牌是否与程序中的其他地方有关,此方法只返回下一个令牌):
public Token next() {
if (c == -1) {
throw new NoSuchElementException();
}
Writer sw=new CharArrayWriter();
try {
while ( c != -1 && Character.isLetter(c) ) {
sw.write(c);
c = r.read();
}
while ( c != -1 && !Character.isLetter(c)) {
c = r.read();
}
} catch (IOException e) {
c = -1;
return null;
}
return null;
}
现在我的返回值为'null',因为我不确定如何使用writer将其导出为标记。有没有人对此有任何提示?谢谢!
答案 0 :(得分:1)
查看可能符合您需求的Scanner类。
http://docs.oracle.com/javase/6/docs/api/java/util/Scanner.html
如果您从文件中构建扫描程序,则可以使用next()
方法获取令牌。
答案 1 :(得分:1)
我想使用Matcher类的解决方案可以解决您的问题。
Matcher m = Pattern.compile("\\p{Alpha}+|\\p{Digit}+|\\p{Punct}+|\\p{Space}+").matcher("It's a good restaurant, believe me!");
while(m.find())
System.out.println(">"+m.group()+"<");
也许这个正则表达式不是正确的,但你可以建立一个更好的正则表达式。请参阅:
中的Pattern文档http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html