0

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

这是一家不错的餐厅,

相信我!

我想将其内容提取为“令牌”-例如,一个令牌将是“It's”,下一个令牌将是“”,之后的一个将是“a”,然后是“”,然后是“good” ,然后是“餐厅”,然后是“,”和“\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 将其导出为令牌。有人对此有任何提示吗?谢谢!

4

2 回答 2

1

查看可能适合您需求的 Scanner 类。

http://docs.oracle.com/javase/6/docs/api/java/util/Scanner.html

如果你从你的文件构建一个扫描器,你可以使用这个next()方法来获取你的令牌。

于 2012-04-09T18:59:13.080 回答
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()+"<");

也许这个正则表达式可能不是正确的,但你可以构建一个更好的。请参阅以下中的模式文档:

http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

于 2012-04-09T19:07:19.203 回答