【问题标题】:How to access the replaceAllIn() counter?如何访问 replaceAllIn() 计数器?
【发布时间】:2020-01-27 01:12:57
【问题描述】:

我正在使用

val str2 = regex.replaceAllIn(str1, "other")

并且需要计算替换的次数...有办法检索内部replaceAllIn 计数器的值吗?

PS:这在其他语言中很常见 (example),所以我认为 Scala 提供了类似的东西。

【问题讨论】:

  • 嗨 @LuisMiguelMejíaSuárez,当从标准 Scala 库(可并行化)更改为经典 Java(顺序)时,我们失去了性能,是吗?
  • 抱歉,我不明白这个问题以及它与此有何关系?

标签: scala regexp-replace


【解决方案1】:
scala> val r = "x".r
r: scala.util.matching.Regex = x

scala> var i = 0
i: Int = 0

scala> r.replaceAllIn("xooxxox", m => { i += 1 ; "X" })
res0: String = XooXXoX

scala> i
res1: Int = 4

将在后台执行appendReplacement

【讨论】:

  • 值得评论的是,与其他答案一样,r.findAllIn(s).replacementData.foldLeft(...)((a,m) => ???) 会感觉更自然,但 Scala API 并不完全允许。
【解决方案2】:

采取另一个步骤,但您可以findAllIn 并计算找到的数量。然后replaceAllIn

scala> "foo".r.findAllIn("barbazfoobazfoo").size
res7: Int = 2

【讨论】:

  • hum... 那么,Scala 不提供对正则表达式操作的基本结果的访问权限吗?使用findAllIn() 将再次全部完成...如果我有一个需要 1 分钟进行替换的 BigBig 字符串,是否会花费更多的 1 分钟来计算?
猜你喜欢
  • 2023-03-21
  • 2014-04-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
相关资源
最近更新 更多