如何在Scala中替换英镑符号£

时间:2018-07-19 10:11:04

标签: scala apache-spark apache-spark-sql scala-collections scalaz

在“销售”栏中,我的£1200值。 Scala中的Data frame无法读取它,请同样帮助我。我想将列值设为1200的两倍。我正在使用以下方法,但无法正常工作。

def getRemovedDollarValue = udf(
  (actualSales: String) => {
    val actualSalesDouble = actualSales
      .replace(",", "")
      .replace("$", "")
      .replace("\\u00A3","")
      .replace("\\U00A3","")
      .replaceAll("\\s", "_").trim().toDouble

    java.lang.Double.parseDouble(actualSalesDouble.toString)
  }
)

2 个答案:

答案 0 :(得分:1)

您需要输入:.replace("\u00A3","")而不是转义.replace("\\u00A3","")

但是我更喜欢:.replace("£", "")-更具可读性。

答案 1 :(得分:1)

我认为建议的解决方案和注释都可以使用,但不能解决代码无法正常工作的困惑。

从Pattern文档中:

  

因此,字符串“ \ u2014”和“ \\ u2014”虽然不相等,但会编译为相同的模式,该模式与十六进制值为0x2014的字符匹配。

replacereplaceAll都替换了String中所有出现的内容,但是只有replaceAll接受了正则表达式。您传入的"\\u00A3"将作为一种模式,但由于添加了反斜杠,因此不能作为Unicode文字。正如已经建议的那样,可以使用unicode文字或实际符号替换,或更改为replaceAll