【发布时间】:2015-12-18 09:28:40
【问题描述】:
我有一个用例,我需要从 Char 的迭代器返回一个字符串,直到一个分隔符字符串(如果找到)。
合同:
- 如果迭代器已用尽(仅在开始时),则返回 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
【问题讨论】:
-
您期望的样本输出是什么?
-
@S.Karthik 添加了示例输出
-
请查看答案
-
请查看答案
标签: scala