从字符串列表中删除字符

时间:2015-08-09 20:26:40

标签: string scala

要从我使用的字符串列表中删除字符:

val validLines : List[String] = List("test[" , "test]")

    val charsToClean: List[String] = List("\"", "[", "]", "'")

    val filtered = validLines.map(line => line.replace(charsToClean(0), "")
      .replace(charsToClean(1), "")
      .replace(charsToClean(2), "")
      .replace(charsToClean(3), ""))

我正在尝试使用内部地图功能,而不是硬编码字符的位置来替换:

val filtered1 : List[String] = validLines.map(line => charsToClean.map {c => line.replace(c , "")  })

但收到编译错误:

mismatch; found : List[List[String]] required: List[String]

是否应该返回line.replace(c , "")的结果?

4 个答案:

答案 0 :(得分:6)

不,因为您的代码更像是:对于每个字符串和每个不需要的字符,请为此符号返回替换(n ^ 2个字符串)。

使用以下代码段可以实现您可能想要做的事情:

val rawLines : List[String] = List("test[" , "test]")
val blacklist: Set[Char] = Set('\"', '[', ']' ,''')
rawLines.map(line => line.filterNot(c => blacklist.contains(c)))
// res2: List[String] = List(test, test)

或者,使用正则表达式,正如@ ka4eli在他的回答中所示。

答案 1 :(得分:3)

replaceAll可以包含使用|(或)运算符构造的更复杂的正则表达式:

validLines.map(_.replaceAll("\\[|\\]|'|\"", ""))

答案 2 :(得分:3)

您需要使用foldLeft代替map

val validLines : List[String] = List("test[" , "test]")

val charsToClean: List[String] = List("\"", "[", "]", "'")

val filtered : List[String] = validLines.map(line => charsToClean.foldLeft(line)(_.replace(_, "")))

答案 3 :(得分:1)

虽然使用了for comprehension语法,但相当于@ om-nom-nom;给出一组要擦除的字符,

val charsToClean = """"[]'""".toSet

然后

for (l <- validLines) yield l.filterNot(charsToClean)

其中隐式集合包含Char => Boolean功能应用于filterNot