从文本文件中提取标记?

时间:2012-04-09 18:56:08

标签: java text token

我希望能够将文本文件中的文本提取为标记 - 例如,假设我有一个包含该句子的文本文件:

这是一家不错的餐厅,

相信我!

我想将其内容提取为'令牌' - 例如,一个令牌将是“它”,下一个令牌将是“”,之后的那个将是“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将其导出为标记。有没有人对此有任何提示?谢谢!

2 个答案:

答案 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