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

Kotlin中Regex的findAll方法如何保留单词范围索引?

Regex.findAll生成的Sequence保留范围索引的原理

这不是编译器的特殊处理,而是Regex.findAll方法的实现逻辑决定的:

  • findAll返回的Sequence里装的是MatchResult实例,每个MatchResult在正则匹配过程中就已经记录了完整的匹配信息:

    1. 正则引擎扫描目标字符串时,每找到一个符合\w+的匹配项,会同步记录这个匹配内容在原字符串中的起始、结束索引,把这些数据封装到MatchResult对象里
    2. Sequence只是一个惰性求值的序列容器,它只是按顺序承载这些预先生成的MatchResult,并不会额外处理或生成索引信息
  • 和split方法的核心区别:split只关注分割后的字符串内容,按\W+这类分隔符拆分原字符串后直接提取子串,不会保留原位置;而findAll的设计目标就是捕获每个匹配的完整上下文,自然包含位置、匹配值这些细节

  • 另外要注意Sequence的惰性特性:它不会一次性生成所有MatchResult,而是在遍历(比如调用forEach)时才逐个生成,但每个MatchResult里的范围索引,在该匹配被正则引擎找到的那一刻就已经确定并存储了


内容的提问来源于stack exchange,提问作者Meerza Al Fardan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 13:42:25