Scala 如何替换磅符号£;在斯卡拉
在“销售”列中,我有带英镑符号的价值1200英镑。scala中的数据帧无法读取,请帮助我。我想要双倍的列值,1200。我使用下面的方法,但它不工作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
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,”)为什么这么简单:。替换(“;”)
,就像对$