startsWith()返回意外值

时间:2010-10-27 23:44:44

标签: java data-structures string startswith

课程项目让我们阅读单个文本文件中包含的10,514首歌曲的标题,艺术家和歌词。项目的当前部分让我们编写一个有序的展开链表并在标题字段上运行搜索。还编写了比较器以按标题对列表进行排序。我们必须跟踪找到匹配所需的比较

测试时,我得到了一些奇怪的结果。例如,运行搜索
天使返回23场比赛,需要进行552次比较,这与教授给出的答案相符 t 返回零匹配并需要9530比较,其中预期1148个匹配 ta 返回62场比赛,需要进行8455次比赛

s 不返回任何匹配项,需要进行8383次比较 sa 返回89场比赛,需要7355次比赛

我的搜索算法运行如下:

  1. 遍历列表以查找第一个匹配项
  2. 遍历列表以查找与搜索字段不匹配的第一个实例
  3. 将开始和结束对象发送到数据结构的Sublist方法,该方法遍历这两个对象并构建单独的匹配列表
  4. 返回匹配列表

对于第一步和第二步,我通过
if (currentSong.getTitle().toLowerCase().startsWith(titleSearch))

将当前值与搜索值进行比较

使用单个字母搜索返回false的这行代码是什么,但是当添加a时,会找到值?最好,我想要一个解决方案,不需要我在调试器中手动单步循环8000次迭代。此外,教授为结构提供了具有预期值的测试,我的代码通过了所有测试。

1 个答案:

答案 0 :(得分:1)

我发现了问题所在。在subList方法中,我使用二进制搜索方法来识别第一个找到的匹配的索引位置。但是,由于二进制搜索仅返回它遇到的第一个匹配,我有一个循环向后走过数组以找到真正的第一个匹配。

然而,在这种情况下,从二进制搜索返回的第一个命中是0索引,所以当我向后走时,抛出了一个ArrayIndexOutOfBoundsException,从而使整个事件短路。添加第二个测试解决了这个问题。