来自新学习者的Scala-String过滤器操作

时间:2018-02-05 06:22:42

标签: string scala filter substring rdd

有一些字符串如:

"A,C,D"   "A,C"   "A,B"   "B,C"   "D,F"   "G,D,H"  

如果我想通过密钥过滤这些字符串:A,C。这意味着,如果String包含A或C,我会接受它。例如,通过这条规则,我会得到:

"A,C,D"   "A,C"   "A,B"   "B,C"

我该如何编写此功能?

3 个答案:

答案 0 :(得分:0)

你应该亲自试试这个,因为这对于Scala的初学者来说是一个很好的学习练习,就像你提到的那样!

所以这里有一个关于如何做到这一点的想法!还有其他一百万种方法,但这只是为了让你开始!

scala> val l = List("A,C,D",   "A,C",   "A,B",   "B,C",   "D,F",   "G,D,H")
l: List[String] = List(A,C,D, A,C, A,B, B,C, D,F, G,D,H)

scala> l.filter(elem => elem.contains("A") || elem.contains("C"))
res1: List[String] = List(A,C,D, A,C, A,B, B,C)

scala>

答案 1 :(得分:0)

假设您的输入是字符串,如下所示

scala> val input = """"A,C,D"   "A,C"   "A,B"   "B,C"   "D,F"   "G,D,H""""
input: String = "A,C,D"   "A,C"   "A,B"   "B,C"   "D,F"   "G,D,H"

您可以按"拆分,然后过滤掉空字符串。然后过滤包含A |的那些C

scala> input.split("\"").map(_.trim).filter(_.nonEmpty).filter(e => e.contains("A") || e.contains("C"))
res1: Array[String] = Array(A,C,D, A,C, A,B, B,C)

或者您也可以应用.*A.*|.*C.*

等正则表达式模式
scala> input.split("\"").filter(_.nonEmpty).filter(_.matches(".*(A|C).*"))
res2: Array[String] = Array(A,C,D, A,C, A,B, B,C)

另见:

filter a List according to multiple contains

答案 2 :(得分:0)

val samples = List ("A,C,D", "A,C", "A,B", "B,C", "D,F", "G,D,H")
samples.filter (s => s.contains ('A') || s.contains ('C')) 
> List(A,C,D, A,C, A,B, B,C)

请注意您是如何提出重要关键字包含过滤器的(尽管您并不总是那么幸运)。