0

我想逐字获取 lucene 停用词列表。我可以访问整个集合,但是当我迭代它时,输出不是我想要的

这是我的代码:

analyzer = new StandardAnalyzer(Version.LUCENE_36);
Set set=analyzer.getStopwordSet();
Iterator iterator = set.iterator();
        while (iterator.hasNext()) {
    System.out.println(iterator.next());
    }

在控制台中我看到它:

[C@7ef955da
[C@23739c56
[C@7b1ce448
[C@25cf721d
[C@564ce14f
[C@515c35cc
[C@7cd00dce
4

3 回答 3

1

你得到“[C@7ef955da”的原因是你被iterator.next()视为对象,System.out.println(...)所以它以十六进制打印其对象的 hashCode()。返回的对象iterator.next()是类型char[]所以试试这个

analyzer = new StandardAnalyzer(Version.LUCENE_36);
Set set=analyzer.getStopwordSet();
Iterator iterator = set.iterator();
        while (iterator.hasNext()) {
    System.out.println((char[])iterator.next());
    }
于 2014-01-24T10:11:28.670 回答
0

Set返回的不getStopwordSet包含字符串,而是 char 数组。很容易转换,只需使用适当的String ctor

Iterator<char[]> iterator = set.iterator();
while (iterator.hasNext()) {
    System.out.println(new String(iterator.next()));
}
于 2013-04-17T08:18:23.603 回答
0

您需要确保iterator.next()char[]. 您的迭代器应如下所示:

while (iterator.hasNext()) {
    char[] stopWord = (char[]) iterator.next();
    System.out.println(String.valueOf(stopWord));
}
于 2014-01-23T19:33:42.693 回答