0

0

在Java里如何实现控制台搜索引擎模型_Java集合项目说明

P粉602998670

P粉602998670

发布时间:2026-02-07 14:15:45

|

847人浏览过

|

来源于php中文网

原创

控制台搜索引擎用Scanner读取关键词,HashMap构建倒排索引,支持AND/OR查询解析,输出限10条并高亮关键词。

在java里如何实现控制台搜索引擎模型_java集合项目说明

Scanner 读取用户输入的搜索关键词

控制台搜索引擎第一步是接收用户输入,Scanner 是最直接的选择。注意别用 nextLine() 后紧接 nextInt() 这类组合——容易因换行符残留导致跳过输入。实际项目中建议统一用 nextLine(),再手动解析数字或 trim 空格。

  • 输入前加提示:比如 System.out.print("请输入关键词:");
  • 对空输入做判断:if (keyword.trim().isEmpty()) { ... },避免后续空指针或无效匹配
  • 若支持多词搜索,用 keyword.split("\\s+") 拆分,注意正则里双反斜杠是 Java 字符串转义必需

HashMap> 做简易倒排索引

不用数据库、不引入 Lucene,靠内存集合模拟搜索引擎核心结构,HashMap 存关键词到文档 ID 列表的映射是最小可行方案。键是标准化后的词(全小写、去标点),值是包含该词的文档标识(比如文件名或序号)。

  • 预处理文档时,对每篇文本调用 toLowerCase().replaceAll("[^a-z0-9\\s]", "") 再分词,保证索引一致性
  • 避免用 ArrayList 存重复文档 ID;插入前用 !list.contains(docId) 去重,或改用 LinkedHashSet
  • 如果文档量超 500 条,contains 线性查找会明显变慢,此时应换为 HashSet 存文档 ID,再转回 List 返回

实现“AND”与“OR”逻辑的查询解析器

用户输入 "java AND spring""python OR rust" 时,不能靠 String.contains() 硬匹配——得先识别操作符,再拆解条件。简单做法是按空格切分后扫描关键词,遇到 "AND""OR" 就切换合并策略。

There’s An AI For That
There’s An AI For That

全球领先的 AI 聚合器,收集10,225个AI工具,可用于超过2,548个任务。

下载
  • "AND" 对应交集:用 ret.retainAll(nextList),初始 ret 设为第一个词的结果
  • "OR" 对应并集:用 ret.addAll(nextList),记得用 new LinkedHashSet(ret) 去重
  • 大小写敏感问题:确保所有操作符判断都用 equalsIgnoreCase(),比如 "and".equalsIgnoreCase(token)
  • 不支持括号嵌套,也不处理 NOT;真要加 NOT,就用 removeAll(),但得小心空集合导致全删

输出结果时控制展示格式与数量

直接打印 ListtoString() 会暴露内部结构,难读。应该封装成带编号、高亮关键词、限制条数的输出。

立即学习Java免费学习笔记(深入)”;

  • Math.min(results.size(), 10) 限制最多显示 10 条,避免刷屏
  • 高亮关键词:对每条文档内容做 content.replace(keyword, "" + keyword + "") —— 控制台不支持 HTML,所以实际用 "[" + keyword + "]" 包裹更稳妥
  • 编号从 1 开始:循环里用 i + 1,别用 for (int i : results) 这种丢失序号的方式
  • 没结果时明确提示 "未找到匹配文档",而不是静默退出
真正卡住人的地方往往不是算法,而是输入清洗不彻底(比如中文混标点没过滤)、空集合参与集合运算、或者大小写没统一就做 equals 判断。这些细节在小数据上没问题,一加测试文档就崩。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C++系统编程内存管理_C++系统编程怎么与Rust竞争内存安全
C++系统编程内存管理_C++系统编程怎么与Rust竞争内存安全

C++系统编程中的内存管理是指 对程序运行时内存的申请、使用和释放进行精细控制的机制,涵盖了栈、堆、静态区等不同区域,开发者需要通过new/delete、智能指针或内存池等方式管理动态内存,以避免内存泄漏、野指针等问题,确保程序高效稳定运行。它核心在于开发者对低层内存有完全控制权,带来灵活性,但也伴随高责任,是C++性能优化的关键。

12

2025.12.22

spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

118

2025.08.06

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

74

2026.01.26

python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

191

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

9

2026.02.03

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

646

2023.08.02

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

799

2023.08.22

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6351

2023.09.14

Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

98

2026.02.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4.1万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号