我有一個用例,我需要從Char的迭代器中返回一個字符串到分隔符字符串(如果找到)。在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添加樣例輸出 –
請檢查答案 –