一、 场景与目标

在使用 IDE 开发软件时, IDE 会提供一种“智能提示”, 根据所输入的字符列出可能的词组; 在日常Web开发中,根据用户输入进行自动提示和补全,也能很好地改善使用体验。本文实现输入自动提示与补全功能。

输入自动补全功能实际上是“前缀匹配问题”, 即给定一个前缀以及一个单词列表, 找出所有包含该前缀的单词。

本文实现的功能是: 根据用户输入的关键字, 给出与之匹配的 Java 关键字。

二、 算法与设计

最简单直观的方案莫过于直接遍历单词列表, 检测每个单词是否包含前缀, 并返回。这样做的缺点是, 每次都要遍历单词列表, 效率非常低下。 一个更好的思路是, 先构建一个前缀匹配映射 Map>, key 是每一个单词中所包含的前缀, value 是包含该 key 的所有单词列表。 那么, 问题就转化为给定一个单词列表 list, 将其转换为 Map> , 这里 Word, Prefix, Matcher 均为 String 类型。

一种思路是, 遍历每一个单词包含的每一个前缀, 找出所有包含该前缀的单词。

for word in words

for prefix in word(0,i)

for word in words

if (word.startWith(prefix)) {

result.put(prefix, result.get(prefix).add(word));

}

显然, 其效率是 O(总前缀数*总单词数), 在单词列表比较大的情况下, 其效率是比较低的。 要想避免这种嵌套

java 输入提示_Java实现输入自动提示与补全功能相关推荐

  1. MyEclipse的自动补全功能:输入@或者.没提示

    自动补全功能.一般默认的只有输入 . 的时候来才能自动提示. 配置方法: 1. 打开MyEclipse,然后"window"→"Preferences" 2. ...

  2. Xcode6中Swift没有智能提示和自动补全功能

    今天在学习Swift的过程中,编写代码,发现没有智能提示和自动补全功能,一阵不适应,在网上溜达了下,找到了解决办法,测试可行 中文系统新建工程,copyright里有日期,2014年,"年& ...

  3. springboot集成elasticsearch,实现搜索提示补全功能

    springboot集成elasticsearch,通过实体类创建索引,实现搜索提示补全功能 文章目录 springboot集成elasticsearch,通过实体类创建索引,实现搜索提示补全功能 一 ...

  4. 你知道为什么Xcode6中Swift没有智能提示和自己主动补全功能吗 ?

    你知道为什么Xcode6中Swift没有智能提示和自己主动补全功能吗 ? 长沙戴维营教育将为你解开这个巨大的谜团大BUG! http://www.ubuntucollege.cn/course/29/ ...

  5. 转:Eclipse自动补全功能轻松设置

    Eclipse自动补全功能轻松设置 || 不需要修改编辑任何文件 2012-03-08 21:29:02|  分类: Java |  标签:eclipse  自动补全  设置  |举报|字号 订阅 下 ...

  6. Eclipse自动补全功能轻松设置 || 不需要修改编辑任何文件

    本文介绍如何设置Eclipse代码自动补全功能.轻松实现输入任意字母均可出现代码补全提示框.   Eclipse代码自动补全功能默认只包括 点"."  ,即只有输入".& ...

  7. linux 函数自动补全,Shell脚本中实现自动补全功能

    对于Linuxer来说,自动补全是再熟悉不过的一个功能了.当你在命令行敲下部分的命令时,肯定会本能地按下Tab键补全完整的命令,当然除了命令补全之外,还有文件名补全. Bash-completion ...

  8. gocode+auto-complete搭建emacs的go语言自动补全功能

    上篇随笔记录了在emacs中使用go-mode和goflymake搭建了go语言的简单编程环境(推送门),今天来记录一下使用gocode+auto-complete配置emacs中go语言的自动补全功 ...

  9. html 输入框自动缩短 一行内显示,JQuery UI组合框自动补全功能改进版(即时全部显示+input内容保存)...

    JQuery UI Autocomplete(自动补全)功能在input前端设计中非常有用,最近一个项目正好用到,仔细研究了下组合框(combobox)的自动补全部分,官方地址是:https://jq ...

最新文章

  1. GRE写作-学生选择有助于就业的课程or根据兴趣选课?
  2. python操作mysql事务提交_python连接mysql并提交mysql事务示例
  3. STM32串口中断实验总结函数的初始化必须在变量的初始化之后在进行!
  4. 关于H3C MSR路由器L2TP隧道协议路由配置的特点
  5. 经验分享:三步走教你升级企业NAS设备
  6. JS学习记录(BOM部分)
  7. 酷桌面:随身携带你的企业
  8. perl6正则 4: before / after 代码断言: ?{} / !{}
  9. pyspark 编写 UDF函数
  10. 全球首发!惯性导航导论(剑桥大学)第一部分
  11. WPF之Binding基础三 Binding的路径Path
  12. Loadrunner关联
  13. 飞客蠕虫专杀工具_案例-飞客蠕虫攻击
  14. WWDC22 - In App Purchase 更新总结
  15. 计算机基础与程序设计
  16. 交换机MAC地址学习与转发机制
  17. 技术分享的优势——写文章半年的收获
  18. 坚果pro2官方rom_坚果pro2线刷包_坚果pro2刷机包_坚果pro2固件包_坚果pro2救砖包 - 线刷宝ROM中心...
  19. 内网/外网介绍以及两者比较
  20. 一边裁员、一边招聘,领导到底想干啥?

热门文章

  1. MySQL数据库之基本语法
  2. DS18B20温度传感器在树莓派下获取实时温度
  3. 高通平台 底层驱动GPIO控制
  4. 如何取消合并单元格并保留单元格内容以及如何合并单元格
  5. 喝酒和感情深有必然的联系吗
  6. osworkflow,workflowstore
  7. 光伏电池板目标检测数据集
  8. 惊呆了,看华为技术专家的500页微服务架构笔记,感觉我格局太小
  9. Watij,配合JRuby截取网易公开课下载列表
  10. CXF——搭建CXF实战例子