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

Scala单遍处理含分隔符字符串序列的高效安全方案需求

Scala 字符串序列单遍处理方案

给定如下字符串序列:

val words = Seq("1 $ cake", "2biscuit", "3brownie", "4 $ honey")

需求是生成结果序列:若字符串包含$,则取其前面的部分并去除首尾空格;否则保留原字符串,期望结果为:

val res = Seq("1", "2biscuit", "3brownie", "4")

最优单遍处理方案

使用Scala原生字符串操作结合集合map方法,实现单遍、安全且高效的处理:

val words = Seq("1 $ cake", "2biscuit", "3brownie", "4 $ honey")
val res = words.map { s =>
  val dollarIndex = s.indexOf('$')
  if (dollarIndex != -1) s.substring(0, dollarIndex).trim else s
}

方案说明

  • 单遍处理:indexOf会从字符串开头扫描到第一个$就停止,后续的substring和trim都基于找到的索引直接操作,没有重复遍历字符串。
  • 安全性:当字符串中不存在$时,indexOf返回-1,此时直接返回原字符串,不会出现数组越界或空指针问题;即使$位于字符串开头,substring(0, 0)得到空字符串,trim后仍为空,逻辑符合预期。
  • 高效性:原生字符串操作是JVM层面优化过的方法,相比正则表达式匹配,避免了正则编译和复杂匹配逻辑的开销,性能更优。

备选方案(正则方式)

如果追求代码简洁性,也可以使用正则表达式,但性能略低于原生索引操作:

val dollarPattern = """^(.*?)\$""".r
val res = words.map {
  case dollarPattern(prePart) => prePart.trim
  case original => original
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:22:03