SegTag tag=new SegTag(4); String str="在最新的研究中,美国威斯康星大学麦迪逊分校的Brad Singer和加州州立工业大学的Kenneth Hoffman分析了来自塔希提岛(位于南太平洋)和德国西部的古代熔岩流(lava flow),以研究地球磁场过去的模式。"; System.out.println(str); SegResult res=tag.split(str); System.out.println(res.getFinalResult()); Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 8, Size: 8 at java.util.ArrayList.RangeCheck(ArrayList.java:547) at java.util.ArrayList.get(ArrayList.java:322) at org.ictclas4j.segment.PosTagger.computePossibility(PosTagger.java: 723) at org.ictclas4j.segment.PosTagger.placeRecognize(PosTagger.java:594) at org.ictclas4j.segment.PosTagger.recognition(PosTagger.java:82) at org.ictclas4j.segment.SegTag.split(SegTag.java:92) at forumIndexer.test.main(test.java:31)
如果改成SegTag tag=new SegTag(1)就没有问题。SegTag的参数segPathCount好像是候选的路径数量。我原来改成了10,出现异常,改成1,2,3都没有问题。大于4就不行了。
出错的代码是:
for (int i = startPos; i < startPos + length && sns != null; i++) { SegNode sn = sns.get(i);
下标越界了。然后我在for里加上条件 i<sns.size(); 就没有问题。但因为我没有仔细阅读代码,不知道这样的修改会不会带来新的bug。