You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何在String类型ArrayList中搜索任意位置匹配的子串?

城市列表任意位置模糊匹配实现方案

原代码问题分析

原代码使用的正则规则(?i) + searchString + .* 仅能匹配以搜索字符串为开头的城市名,因此输入包含在城市名中间、结尾的字符串时无法命中目标结果。

修复方案

方案1:调整正则匹配规则

在搜索字符串前后都添加通配符.*,即可匹配任意位置包含搜索词的文本,同时保留忽略大小写的特性。为避免搜索词包含正则特殊字符(如.、*)导致匹配异常,建议用Pattern.quote()对搜索词做转义处理:

import java.util.regex.Pattern;

// 提前初始化好的城市列表
ArrayList<String> myCities; 
String searchString = scanner.nextLine();

List<String> matchedCities = new ArrayList<>();
String regex = "(?i).*" + Pattern.quote(searchString) + ".*";
for (String c : myCities) {
    if (c.matches(regex)) {
        matchedCities.add(c);
    }
}

方案2:使用原生字符串包含判断(更高效简洁)

如果不需要复杂的正则规则,直接将城市名和搜索词统一转为小写/大写后调用contains方法,性能更优也无需处理正则转义:

// 提前初始化好的城市列表
ArrayList<String> myCities;
String searchString = scanner.nextLine().toLowerCase();

List<String> matchedCities = new ArrayList<>();
for (String c : myCities) {
    if (c.toLowerCase().contains(searchString)) {
        matchedCities.add(c);
    }
}

内容的提问来源于stack exchange,提问作者Programmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:15:08