【发布时间】:2018-09-18 11:33:58
【问题描述】:
我正在做一个项目,我在 XML 文件中有书名。然后将这些解析并转换为book 对象的数组列表。现在我想搜索它们。我已经成功实现了Collections.binarySearch()。现在的问题是,由于搜索会寻找完全匹配的内容,因此只有在拼写正确的情况下才会打开一本书。例如,如果我要输入“Harry Pottr”,因为拼写错误,我什么也得不到。我需要知道几件事:
-
我将如何制作一个系统,该系统可以为与数组中的某些内容足够接近的输入提供结果。例如:
ArrayList<Book> library = new ArrayList<Book>();
为了简单起见,假设我在数组中添加了一些书籍:"Harry Potter", "The Lord of The Rings", "Wonder"现在,如果我要在数组中搜索
"Wnder",我希望这本书仍然出现。 我可以使用
Collections.binarySearch()函数来解决这个问题,还是我需要自己进行二分搜索才能使用它。
最后我想说我是用 Java 做的,所以我只能使用标准库和实际语言。我也知道那里有类似的问题,但没有一个真正回答如何将其应用于搜索的问题。
附:我知道 Levenshtein 距离。但是,如果我想出这一点,我是否可以将其用于已经使用的 Collections 搜索功能。
【问题讨论】:
-
阅读“Levenshtein 距离”。 Google 会在搜索时使用它,这就是为什么
Harry Pottr会显示Harry Potter的结果。 -
@TimBiegeleisen 是的,我对此进行了一些研究。但是我可以将 Levenshtein 距离应用于 Collections.binarySearch()。
-
我最近询问了一个类似的question,它可能对您产生关于如何实施不寻找精确匹配的
Comparator的想法时有用。但请注意答案:虽然我的Comparator适用于我的用例,但它违反了Comparator的约定,这反过来可能导致其他用例中出现不可预测的行为。 -
@JanusVarmarken 感谢您链接问题。您得到的答案之一正是我所需要的。
标签: java string arraylist binary-search similarity