说我有一个清单:
val l = List("and", "or", "up to").
我想检查来自l
的这些条目中是否存在任何字符串。如果存在,则使用l
中找到的第一个条目拆分字符串。如果没有,则返回整个字符串。
例如,假设我们的字符串为:"1.5 litres of milk or 2 apples"
应返回List("1.5 litres of milk", "2 apples")
。
另一方面,像"1.5 litres of milk along with 2 apples"
这样的字符串应该返回List("1.5 litres of milk along with 2 apples")
。
答案 0 :(得分:2)
试试这个:
def splitOnFirstMatch(splitters: List[String], s: String): List[String] = {
splitters.find(s.contains) match {
case Some(x) => s.split(x).map(_.trim).toList
case None => List(s)
}
}
我首先在splitters
中找到包含在s
中的第一个字符串,然后返回在此单词上拆分的字符串。如果不存在拆分器,则返回带有输入字符串的列表。
答案 1 :(得分:2)
假设(来自你的评论)" caseLine"包含要拆分的文本,您可以尝试:
l.find(caseLine.contains).map(caseLine.split)
.map(_.toList.map(_.trim))
.getOrElse(caseLine :: Nil)
查找返回l
中caseLine
的第一个元素,作为Option
,然后映射生成caseLine
分割,然后修剪,最后{如果getOrElse
返回caseLine
,则{1}}会返回原始find
。结果已全部转换为None
,以便对结果进行一致输入。