查找与scala中的特定条件匹配的最长前缀

时间:2016-01-25 23:49:25

标签: scala functional-programming

我试图找出一种方法来找出符合特定条件的字符串的最长前缀。

编写一个确实如此的命令式方法是微不足道的,但我是scala的新手,并想知道是否有一种惯用的scala(或函数)方法来做到这一点。

  • 继续迭代最长的前缀(mystring.take(mystring.size),.. mystring.take(1)
  • 在每个子字符串上应用谓词
  • 如果前缀与谓词匹配,则中断循环并返回最长前缀。

1 个答案:

答案 0 :(得分:1)

例如,这个:

def predicate(str: String): Boolean = ???

val longest_matching: Option[String] = 
  Iterator(mystring.size, 0, -1) // iterator of lengths
    .map(mystring.take)          // take string prefix
    .find(predicate)             // find first matching entry

longest_matching.fold {
  println("No matching prefix")
} { prefix =>
  println("Longest matching prefix: " + prefix)
}

您可以使用inits

充分利用Scala标准库
val longest_matching = mystring.inits.find(predicate)