我正在尝试替换字符串中的括号(即列名)。它适用于空格,但没有(
括号。我特意"""
,\(
,\\(
,但我总是遇到错误。我也尝试了这个提示How can I escape special symbols in scala string?,但它确实帮助了我。你能告诉我怎么解决这个问题吗?
import org.apache.commons.lang3.StringEscapeUtils
var newDf = df
for(col <- df.columns){
newDf = newDf.withColumnRenamed(col,col.replaceAll(StringEscapeUtils.escapeJava("("), "_"))
newDf = newDf.withColumnRenamed(col,col.replaceAll(" ", "-"))
}
非常感谢!
答案 0 :(得分:3)
replaceAll 使用正则表达式,因此您只需将括号放在一个字符类中,您就不会将它们转义为它们:
val df = Seq((1,2)).toDF("(ABC)", "C D")
df.columns
// res28: Array[String] = Array((ABC), C D)
var newDf = df
for(col <- df.columns){
newDf = newDf.withColumnRenamed(col, col.replaceAll(" ", "-").replaceAll("[()]", "_"))
}
newDf.columns
// res30: Array[String] = Array(_ABC_, C-D)
或\\(|\\)
也应该有效:
newDf.withColumnRenamed(col, col.replaceAll(" ", "-").replaceAll("\\(|\\)", "_"))