不使用正则表达式如何安全提取字符串中括号内的内容
括号内文本提取实现方案
你给出的示例为Kotlin语法,以下提供几种不需要正则、无索引越界风险、可读性更高的实现:
方案1:极简语义化写法(最推荐)
直接用Kotlin内置的字符串截取函数,语义和需求完全匹配:
val s = "123 some address (Latitude 100, Longitude 500)" val content = s.substringAfter('(').substringBeforeLast(')')
说明:substringAfter('(') 会拿到左括号之后的全部内容,再调用substringBeforeLast(')') 会去掉最后一个右括号及之后的内容,一步得到目标文本,不需要手动计算索引,逻辑直观易懂。
方案2:显式索引写法(逻辑最清晰)
如果希望更直观展示索引计算逻辑,可以用这种写法:
val s = "123 some address (Latitude 100, Longitude 500)" val leftBracketIndex = s.indexOf('(') val rightBracketIndex = s.lastIndexOf(')') val content = s.substring(leftBracketIndex + 1, rightBracketIndex)
说明:substring的第二个参数是开区间,刚好不需要额外裁剪末尾字符,比你目前先截取前半段再删除末尾字符的写法逻辑更连贯。
可选容错增强版本
如果后续需要兼容字符串不存在括号的场景,可以加简单判断避免异常:
val content = s.indexOf('(').takeIf { it != -1 }?.let { leftIdx -> s.lastIndexOf(')').takeIf { it > leftIdx }?.let { rightIdx -> s.substring(leftIdx + 1, rightIdx) } } ?: "" // 无匹配括号时返回空字符串
内容的提问来源于stack exchange,提问作者Blankman
相关产品推荐
相关产品推荐

