Scala 如何替换磅符号£;在斯卡拉

Scala 如何替换磅符号£;在斯卡拉,scala,apache-spark,apache-spark-sql,scala-collections,scalaz,Scala,Apache Spark,Apache Spark Sql,Scala Collections,Scalaz,在“销售”列中,我有带英镑符号的价值1200英镑。scala中的数据帧无法读取,请帮助我。我想要双倍的列值,1200。我使用下面的方法,但它不工作 def getRemovedDollarValue = udf( (actualSales: String) => { val actualSalesDouble = actualSales .replace(",", "") .replace("$", "") .replace("\\u00A3

在“销售”列中,我有带英镑符号的价值1200英镑。scala中的数据帧无法读取,请帮助我。我想要双倍的列值,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)
  }
)

您需要写入:
.replace(“\u00A3”,”)
而不是转义
。replace(“\\u00A3”,”)


但是我更喜欢:
.replace(“;”,”)
-它更可读。

您需要写:
。replace(“\u00A3”,”)
而不是转义
。replace(“\\u00A3”,”)


但是我更喜欢:
.replace(“;”)
-它更具可读性。

我认为建议的解决方案和注释都能起作用,但不能解决代码不起作用背后的困惑

从模式文档中:

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


replace
replaceAll
都在替换字符串中出现的所有内容,但只有
replaceAll
接受正则表达式。您正在传入
“\\u00A3”
,它将作为一个模式使用,但由于添加了反斜杠,因此不是unicode文本。如前所述,使用替换为unicode文字或实际符号,或更改为
replaceAll

我认为建议的解决方案和注释都可以工作,但没有解决代码不工作背后的困惑

从模式文档中:

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


replace
replaceAll
都在替换字符串中出现的所有内容,但只有
replaceAll
接受正则表达式。您正在传入
“\\u00A3”
,它将作为一个模式使用,但由于添加了反斜杠,因此不是unicode文本。如前所述,使用替换为unicode文字或实际符号,或更改为
replaceAll

“actualSalesDouble”它是否仍存储1200英镑?您是否也可以尝试此方法?替换(/\u00A3/g,”)为什么这么简单:
。替换(“;”)
就像您对
$
“actualSalesDouble”所做的那样,它仍然存储着1200英镑吗?您也可以尝试一下吗?替换(/\u00A3/g,”)为什么这么简单:
。替换(“;”)
,就像对
$