我想在scala中找到一个单行函数来实现substringAfter
,这与commons-lang的StringUtils.substringAfter()
相同。
def substringAfter(str:String, key:String) = ...
一些测试:
substringAfter("1234512345", "23") // ==> 4512345
substringAfter("1234512345", "a") // ==> ""
substringAfter("1234512345", "") // ==> 1234512345
substringAfter("", "23") // ==> ""
此处无需考虑null
str。
目前,我有这样的解决方案:
def substringAfter(s:String,k:String) = {
s.indexOf(k) match {
case -1 => ""
case i => s.substring(i+k.length)
}
}
如何获得一行?
答案 0 :(得分:5)
def substringAfter(s:String,k:String) = { s.indexOf(k) match { case -1 => ""; case i => s.substring(i+k.length) } }
答案 1 :(得分:4)
效率较低,但略短:
def substringAfter(s: String, k: String) =
s.tails.find(_.startsWith(k)).map(_.drop(k.length)).getOrElse("")
或者正如你的正则:
def substringAfter(s: String, k: String) =
(".*?(?:\Q"+k+"\E)(.*)").r.unapplySeq(s).flatten.mkString
答案 2 :(得分:1)
我的朋友给了我一个解决方案:
def substringAfter(str:String, key:String) =
str.stripPrefix(str.take(str.indexOf(key))+key)
答案 3 :(得分:1)
您的版本已重写为使用默认功能的地图:
def substringAfter(s: String, k: String) =
Map(-1 -> "").withDefault(i => s.substring(i + k.length))(s.indexOf(k))