gpt4 book ai didi

scala - 在 Char 迭代器中查找字符串

转载 作者:行者123 更新时间:2023-12-01 08:26:15 25 4
gpt4 key购买 nike

我有一个用例,我需要从 Char 的迭代器返回一个字符串,直到一个分隔符字符串(如果找到)。

契约(Contract):

  • 如果迭代器已用尽(仅在开始时),则返回 None
  • 如果找到分隔符字符串,则返回它之前的所有字符(空字符串也可以),分隔符将被删除
  • 否则返回剩余的字符
  • 不要急于耗尽迭代器!

我确实有这个可行的解决方案,但感觉就像 Java(这是我来自的地方)

class MyClass(str: String) {
def nextString(iterator: Iterator[Char]): Option[String] = {
val sb = new StringBuilder
if(!iterator.hasNext) return None
while (iterator.hasNext) {
sb.append(iterator.next())
if (sb.endsWith(str)) return Some(sb.stripSuffix(str))
}
Some(sb.toString())
}
}

有没有一种方法可以让我以更实用的方式做到这一点(最好不改变方法签名)?

更新:这是我的测试方法

val desmurfer = new MyClass("_smurf_")
val iterator: Iterator[Char] = "Scala_smurf_is_smurf_great_smurf__smurf_".iterator
println(desmurfer.nextString(iterator))
println(desmurfer.nextString(iterator))
println(desmurfer.nextString(iterator))
println(desmurfer.nextString(iterator))
println(desmurfer.nextString(iterator))
println
println(desmurfer.nextString("FooBarBaz".iterator))
println(desmurfer.nextString("".iterator))

输出:

Some(Scala)
Some(is)
Some(great)
Some()
None

Some(FooBarBaz)
None

最佳答案

这个怎么样:

scala> def nextString(itr: Iterator[Char], sep: String): Option[String] = {
| def next(res: String): String =
| if(res endsWith sep) res dropRight sep.size else if(itr.hasNext) next(res:+itr.next) else res
| if(itr.hasNext) Some(next("")) else None
| }
nextString: (itr: Iterator[Char], sep: String)Option[String]

scala> val iterator: Iterator[Char] = "Scala_smurf_is_smurf_great".iterator
iterator: Iterator[Char] = non-empty iterator

scala> println(nextString(iterator, "_smurf_"))
Some(Scala)

scala> println(nextString(iterator, "_smurf_"))
Some(is)

scala> println(nextString(iterator, "_smurf_"))
Some(great)

scala> println(nextString(iterator, "_smurf_"))
None

scala> println(nextString("FooBarBaz".iterator, "_smurf_"))
Some(FooBarBaz)

关于scala - 在 Char 迭代器中查找字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34352315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com