【问题标题】:How to implement a simple auto-complete functionality?如何实现一个简单的自动完成功能?
【发布时间】:2010-09-09 12:59:52
【问题描述】:

我想实现一个简单的类(在 Java 中),它允许我注册和取消注册字符串,并根据当前的字符串集自动完成给定的字符串。因此,界面将是:

  • 无效添加(字符串)
  • 无效删除(字符串)
  • 字符串完成(字符串)

就算法和数据结构而言,最好的方法是什么?

【问题讨论】:

  • 如果 complete() 不明确怎么办?
  • complete() 是明确的,因为它只会完成到歧义开始的点(即它不会返回注册字符串,而是一些注册字符串的公共前缀)。可能还有另一种方法可以返回已注册字符串的列表。

标签: java autocomplete


【解决方案1】:

我创建了一个名为 Simple AutoComplete 的 JQuery 插件,它允许您在同一页面上根据需要添加许多自动完成功能,并添加带有额外参数的过滤器,并执行回调函数以带来其他参数,例如项目。

查看http://www.idealmind.com.br/projetos/simple-autocomplete-jquery-plugin/

【讨论】:

    【解决方案2】:

    对于那些偶然发现这个问题的人......

    我刚刚在 Google 代码上发布了 server-side autocomplete implementation。该项目包括一个可以集成到现有应用程序中的 java 库和一个独立的 HTTP AJAX 自动完成服务器。

    我希望这能让人们将高效的自动完成功能整合到他们的应用程序中。踢轮胎!

    【讨论】:

      【解决方案3】:

      您应该考虑使用 PATRICIA trie 作为数据结构。在 google 上搜索“patricia trie”,你会发现很多信息...

      【讨论】:

      • 很棒的建议,我从没听说过 PATRICIA trie。绝对是我要做更多研究的,
      • 感谢您的回答。我最终使用了这个基数树的 Java 实现:code.google.com/p/radixtree
      【解决方案4】:

      您所追求的数据结构称为三元搜索树。

      在 www.javaworld.com/javaworld/jw-02-2001/jw-0216-ternary.html 上有一个很棒的 JavaWorld 示例

      【讨论】:

        【解决方案5】:

        它必须是某种可以按排序顺序维护的列表。您还必须编写自己的搜索算法,该算法将为您提供列表中与您的搜索模式匹配的第一个元素的索引。然后从那个索引开始迭代,直到第一个不匹配的元素,你就有了可能的完成列表。

        我会从 commons-collections 中查看 TreeList。它具有从列表中间快速插入和删除的时间,您需要这些时间来保持排序顺序。从支持该列表的树中编写搜索功能可能相当容易。

        【讨论】:

          【解决方案6】:

          正则表达式。

          【讨论】:

            猜你喜欢
            • 2012-08-04
            • 2017-10-06
            • 1970-01-01
            • 2012-06-09
            • 1970-01-01
            • 2022-08-15
            • 2014-09-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多