使用scala替换字符串中的字符

时间:2017-05-11 17:46:38

标签: java scala

如何替换给定字符串中的字符。

我写了下面的代码,但是这里迭代了字符。

val chars = "\\`*{}[]()<>#+:~'%^&@?;,.\"!$=|"
var newString = inputString 
chars.map { c =>
  if (inputString.contains(c)){
    newString = newString.replace(c, '_')
  }
}

我正在查看类似于下面的代码。不幸的是,这是一个错误。有人可以帮我弄清楚错误吗?

scala> "hello:world".replaceAll("\\`*{}[]()>#+:~'%^&@<?;,\"!$=|.", "_")
java.util.regex.PatternSyntaxException: Illegal repetition near index 2
\`*{}[]()>#+:~'%^&@<?;,"!$=|.
^

事实证明,第一个参数需要是参数的正则表达式,而不是字符列表,但我仍然会收到错误:

scala> "hello:world".replaceAll("[`*{}[]()>#+:~'%^&@<?;,\"!$=|.]", "_")
java.util.regex.PatternSyntaxException: Unclosed character class near index 29
[`*{}[]()>#+:~'%^&@<?;,"!$=|.]
                             ^

1 个答案:

答案 0 :(得分:3)

你没有逃避正则表达式中需要转义的所有字符。 这有效:

"hello:world".replaceAll("[\\`\\*{}\\[\\]()>#\\+:\\~'%\\^&@<\\?;,\"!\\$=\\|\\.]", "_")

但我猜你真正想要的是:

"hello:world".replaceAll("\\W", "_")
相关问题