Kotlin如何实现在ArrayList的字符串中搜索任意顺序的多关键词
解决方案
你需要先把输入的搜索条件按空格拆分为独立关键词,再逐个校验每个关键词是否都存在于目标title中即可,具体实现如下:
修改后代码
fun clickItem(criteria: String) { // 拆分关键词:按任意数量空格分割,过滤空字符串、前后去空格 val keywords = criteria.split("\\s+".toRegex()) .filter { it.isNotBlank() } .map { it.trim().lowercase() } // 无有效搜索关键词时返回全量列表,可按业务需求调整逻辑 if (keywords.isEmpty()) { productList = ArrayList(productListAll) return } productList = productListAll.filter { data -> // 所有关键词都要在title中存在,不限制顺序 keywords.all { keyword -> data.title.lowercase().contains(keyword) } } as ArrayList<Data> }
逻辑说明
- 拆分关键词时用正则
\\s+匹配任意多个连续空格,避免用户输入多个空格、首尾带空格的场景下拆分出无效空字符串 - 提前把关键词和title都转成小写实现忽略大小写匹配,性能优于重复调用
contains的ignoreCase参数 - 用
all函数保证所有拆分后的关键词都必须在title中存在,完全匹配「包含全部搜索词、不限制出现顺序」的需求 - 额外补充了空关键词的兜底逻辑,避免用户输入全空格时返回空列表,可根据自身业务要求调整
内容的提问来源于stack exchange,提问作者Edward B.
相关产品推荐
相关产品推荐

