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" 就切换合并策略。

影谱
影谱

汉语电影AI辅助创作平台

下载
  • "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 应用的安全性与用户数据保护。

72

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的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

4

2026.02.03

string转int
string转int

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

606

2023.08.02

if什么意思
if什么意思

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

798

2023.08.22

登录token无效
登录token无效

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

6322

2023.09.14

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

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

2

2026.02.06

热门下载

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

精品课程

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

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.4万人学习

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

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