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
相关产品推荐
相关产品推荐

