Java实现根据用户输入的部分ID搜索ArrayList
实现ArrayList中ID的部分匹配搜索
没问题,要把你的完全匹配改成部分匹配其实非常简单,只需要调整判断逻辑就行,结合你已经在用的.toUpperCase()统一大小写,就能实现不区分大小写的模糊搜索啦。
核心思路
原来你用的是equals()做完全相等判断,现在换成contains()方法,只要ArrayList中的大写ID包含用户输入转大写后的关键词,就判定为匹配。
完整示例代码
假设你的ArrayList里存的是带ID属性的实体类,这里我写一个完整的可运行示例:
import java.util.ArrayList; import java.util.List; import java.util.Scanner; // 模拟你的条目实体类,可根据实际情况调整属性和方法 class Entry { private String id; // 可添加其他业务属性,比如名称、描述等 public Entry(String id) { this.id = id; } public String getId() { return id; } // 重写toString方便打印条目详情 @Override public String toString() { return "Entry{id='" + id + "'}"; } } public class PartialIdSearchDemo { public static void main(String[] args) { // 初始化测试数据,所有ID均为大写 List<Entry> entryList = new ArrayList<>(); entryList.add(new Entry("HOUSE_001")); entryList.add(new Entry("HOUSE_002")); entryList.add(new Entry("CAR_001")); entryList.add(new Entry("OFFICE_001")); Scanner scanner = new Scanner(System.in); System.out.print("请输入要搜索的ID关键词:"); // 处理用户输入:去除首尾空格 + 转大写,统一匹配规则 String searchKeyword = scanner.nextLine().trim().toUpperCase(); // 方式1:传统循环筛选(兼容所有Java版本) List<Entry> matchedEntries = new ArrayList<>(); for (Entry entry : entryList) { // 用contains代替equals,实现部分匹配 if (entry.getId().contains(searchKeyword)) { matchedEntries.add(entry); } } // 方式2:Java 8+ Stream API(代码更简洁) // List<Entry> matchedEntries = entryList.stream() // .filter(entry -> entry.getId().contains(searchKeyword)) // .toList(); // 输出搜索结果 if (matchedEntries.isEmpty()) { System.out.println("未找到匹配的条目"); } else { System.out.println("找到 " + matchedEntries.size() + " 条匹配结果:"); matchedEntries.forEach(System.out::println); } scanner.close(); } }
关键说明
- 大小写统一:保持用户输入转大写的逻辑,因为你的ArrayList中ID都是大写,这样用户输入
house、HouSe或者HOU都能匹配到所有ID含HOUSE的条目,实现不区分大小写的搜索。 - 部分匹配核心:用
String.contains()方法替代原来的equals(),这个方法会检查目标字符串是否包含指定的子串,完美满足你的部分匹配需求。 - 可选优化:如果需要支持更复杂的匹配规则(比如通配符、正则),可以改用
String.matches()方法,但对于基础的部分匹配,contains()已经足够高效和简单。
内容的提问来源于stack exchange,提问作者Ekko
相关产品推荐
相关产品推荐

