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

Java 8如何实现字符串语句与列表元素匹配并返回计算后索引

Java 8 实现字符串匹配返回索引+长度的最优方案

需求回顾

你当前需要实现的逻辑为:

  1. 校验目标句子是否包含待匹配列表中的任意元素
  2. 匹配成功后返回该元素在句子中的起始索引加上元素自身长度,多匹配场景默认取最后一个匹配结果,无匹配返回0

核心实现代码

和原有for循环逻辑完全对齐的Java 8 Stream实现如下:

// 待匹配列表
List<String> tobeMatched = new ArrayList<>(Arrays.asList("History","Geography"));
// 目标句子
String sentence1 = "Chapter History is a boring one";

int result = tobeMatched.stream()
        // 过滤出句子中包含的匹配项
        .filter(sentence1::contains)
        // 映射为 起始索引+元素长度 的int值
        .mapToInt(matchStr -> sentence1.indexOf(matchStr) + matchStr.length())
        // 保留最后一个匹配结果,和原for循环逻辑完全一致
        .reduce((pre, cur) -> cur)
        // 无匹配时默认返回0
        .orElse(0);

上述代码运行后输出结果为14,和示例预期一致。

优化说明

  • 若业务要求取第一个匹配到的结果,可以将reduce((pre, cur) -> cur)替换为findFirst(),无需遍历完整个列表,性能更高:
    int result = tobeMatched.stream()
            .filter(sentence1::contains)
            .mapToInt(matchStr -> sentence1.indexOf(matchStr) + matchStr.length())
            .findFirst()
            .orElse(0);
    
  • 采用mapToInt直接处理基本类型数值,避免了包装类自动拆箱的性能开销,是Stream处理数值场景的最优写法
  • 无匹配场景的返回值可根据业务需求自定义,直接修改orElse()方法的入参即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:27:01