如何在 Java 中使用 String 类型的 ArrayList 搜索字符串值?
Posted
技术标签:
【中文标题】如何在 Java 中使用 String 类型的 ArrayList 搜索字符串值?【英文标题】:How can I search String value with ArrayList of String type in Java? 【发布时间】:2022-01-05 17:29:51 【问题描述】:我有一个城市列表,想从这些城市中搜索:
ArrayList myCities; // list of cities
String searchString = scanner.nextLine();
List<String> matchedCities = new ArrayList(); // an empty list for storing matched cities
for(String c : myCities)
if(c.matches("(?i)" + searchString + ".*"))
matchedCities.add(c);
例如。苹果如果它是数组中的一个元素 目前 c 返回 apple of if ap enter or apple 但不用于 ppl。
这仅适用于城市以或开头/首字母开头的情况,但是我希望如果用户从中间输入字符串,它应该返回建议的城市;
例如如果用户输入 ppl,它应该返回 apple,或者任何具有 ppl 的单词,无论它是以开头还是包含在中间还是以结尾。
【问题讨论】:
你尝试过 String::contains() 吗? 您发布的代码无法编译。 是的,我确实尝试过 contains(),但它没有给我想要的东西。 【参考方案1】:String::matches
隐式检查整个字符串,就好像应用了 "^" 和 "$" 锚点,因此检查中间值的小修复方法是更新正则表达式以允许任何前缀 ".*"
。
另外,可能需要将searchString
放在\Q
和\E
之间以启用按字符串文字 进行搜索,并自动转义可能为正则表达式保留的字符。
if (c.matches("(?i).*\\Q" + searchString + "\\E.*"))
matchedCities.add(c);
另一种选择是将searchString
和列表中的元素转换为相同的大小写并使用contains
。
使用 Stream API 的示例实现:
String search = searchString.toLowerCase();
List<String> matchedCities = cities
.stream()
.filter(c -> c.toLowerCase().contains(search))
.collect(Collectors.toList());
更新
要返回/打印search
字符串后面的单词部分,可以使用String::substring
、String::indexOf
和String::length
:city.substring(city.indexOf(search) + search.length())
String search = searchString.toLowerCase();
List<String> afterMatch = cities
.stream()
.filter(c -> c.toLowerCase().contains(search))
.map(c -> c.substring(c.indexOf(search) + search.length()))
.peek(System.out::println) // print the part after the search
.collect(Collectors.toList());
【讨论】:
谢谢你,它成功了。 @Programmer 请访问帮助中心了解如何操作if you get a helpful answer to your question 我怎样才能得到下一个字母,如果一个应用进入,它应该说下一个字母是 lle。 不确定我是否完全理解您的评论,请详细说明并作为单独的问题发布。也期待您接受/支持答案:) 如果一个字符串是一个苹果,例如。 String s = "Apple",而 searchString 是 pp,应该说下一个字母是 le。目前我使用 s.substring(searchString.length();以上是关于如何在 Java 中使用 String 类型的 ArrayList 搜索字符串值?的主要内容,如果未能解决你的问题,请参考以下文章
Java: 如何把String类型数据 A 转化为 int类型数据65?
如何在 Java 中使用 String 类型的 ArrayList 搜索字符串值?