scala部分字符串匹配

scala部分字符串匹配,scala,match,intersect,Scala,Match,Intersect,我有一个关于字符串列表与字符串列表部分匹配的问题(我想是相交的) 我想取列表1中碰巧也在列表2中的任何元素或元素组合,并将其替换为列表2中的元素,例如,[a,b]在列表1中,列表2包含元素[a b],在这种情况下,列表1中的[a,b]将替换为[a b]。清单1的结果应为: List1result = [a b,c,d,e f] 我试过intersect,它会返回[ab,ef]好的,我在下面的评论之后编辑了我的答案,我想我现在理解了这个问题 获取第二个列表中的每个元素,将其转换为元素列表,并使

我有一个关于字符串列表与字符串列表部分匹配的问题(我想是相交的)

我想取列表1中碰巧也在列表2中的任何元素或元素组合,并将其替换为列表2中的元素,例如,[a,b]在列表1中,列表2包含元素[a b],在这种情况下,列表1中的[a,b]将替换为[a b]。清单1的结果应为:

List1result = [a b,c,d,e f] 

我试过intersect,它会返回[ab,ef]

好的,我在下面的评论之后编辑了我的答案,我想我现在理解了这个问题

获取第二个列表中的每个元素,将其转换为元素列表,并使用
containsSlice
过滤掉该值

如果切片中的所有元素都出现在第一个列表中,
containsSlice
将返回true

val lst1 = List("a","b","c","d","e","f")
val lst2 = List("a b","e f","g h","x y")

lst2.filter{ pair =>
  val xss = pair.split(" ")
  lst1.containsSlice(xss)
}

您可以尝试以下方法:

  val l1 = List("a", "b", "c", "d", "e", "f")

  val l2 = List("a b", "e f", "g h", "x y")

  l1.filterNot(x=>l2.flatten.filter(_ != ' ').contains(x.toCharArray.head))

 l2.foldLeft(List[String]()) { case (x, y) => if (l1.containsSlice(y.split(" "))) x :+ y else x} ++ 
l1.filterNot(x=>l2.flatten.filter(_ != ' ').contains(x.toCharArray.head))


l1: List[String] = List(a, b, c, d, e, f)
l2: List[String] = List(a b, e f, g h, x y)
res0: List[String] = List(a b, e f, c, d)

“我想用什么替换任何元素”?——“列表1中的任何元素碰巧也在列表2中,但“c”和“d”不在列表2中?对不起,我的意思是替换列表1中与列表2中共享相同字符串的元素。我已经修改了问题清单2没有“a”、“b”。它有一个b。OP想用“a b”替换列表1中的“a”、“b”
  val l1 = List("a", "b", "c", "d", "e", "f")

  val l2 = List("a b", "e f", "g h", "x y")

  l1.filterNot(x=>l2.flatten.filter(_ != ' ').contains(x.toCharArray.head))

 l2.foldLeft(List[String]()) { case (x, y) => if (l1.containsSlice(y.split(" "))) x :+ y else x} ++ 
l1.filterNot(x=>l2.flatten.filter(_ != ' ').contains(x.toCharArray.head))


l1: List[String] = List(a, b, c, d, e, f)
l2: List[String] = List(a b, e f, g h, x y)
res0: List[String] = List(a b, e f, c, d)