使用第一个条目拆分字符串

时间:2015-10-23 10:14:19

标签: scala

说我有一个清单:

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")

2 个答案:

答案 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)

查找返回lcaseLine的第一个元素,作为Option,然后映射生成caseLine分割,然后修剪,最后{如果getOrElse返回caseLine,则{1}}会返回原始find。结果已全部转换为None,以便对结果进行一致输入。