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

如何在未知精确子串的前提下搜索SpannableString并获取匹配项位置与长度

解决方案

实现思路

  • 先将SpannableString转为普通String,使用正则表达式匹配[size=??]格式的子串,正则规则为\[size=.*?\],其中非贪婪匹配符.*?可以匹配两个定界符之间的任意长度任意字符,不会出现跨匹配的问题。
  • 匹配到结果后可直接获取匹配项的起始索引、子串长度。

代码示例

Kotlin 版本

val spannable = SpannableString("string [size=212] more string")
// 编译正则规则
val pattern = Pattern.compile("\\[size=.*?\\]")
val matcher = pattern.matcher(spannable.toString())

if (matcher.find()) {
    val startIndex = matcher.start() // 匹配项起始索引,示例中返回7
    val matchLength = matcher.end() - matcher.start() // 匹配项长度,示例中返回10
    val matchContent = matcher.group() // 匹配到的完整子串,示例中返回[size=212]
    // 后续业务逻辑
}

Java 版本

SpannableString spannable = new SpannableString("string [size=212] more string");
Pattern pattern = Pattern.compile("\\[size=.*?\\]");
Matcher matcher = pattern.matcher(spannable.toString());

if (matcher.find()) {
    int startIndex = matcher.start(); // 匹配项起始索引
    int matchLength = matcher.end() - matcher.start(); // 匹配项长度
    String matchContent = matcher.group(); // 匹配到的完整子串
    // 后续业务逻辑
}

多匹配场景处理

如果需要匹配字符串中所有符合规则的子串,把if (matcher.find())替换为while (matcher.find())遍历所有结果即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:57:03