【问题标题】:How to replace pound sign £ in scala如何在scala中替换英镑符号£
【发布时间】:2018-07-19 10:11:04
【问题描述】:

在销售列中,我的值带有英镑符号 £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)
  }
)

【问题讨论】:

  • 'actualSalesDouble' 还存£1200 吗?
  • 你也可以试试这个吗?替换(/\u00A3/g, '')
  • 为什么这么简单:.replace("£", "") 就像你为 $ 做的那样

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


【解决方案1】:

你需要写:.replace("\u00A3","") 而不是转义.replace("\\u00A3","")

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

【讨论】:

    【解决方案2】:

    我认为建议的解决方案和 cmets 都有效,但没有解决您的代码为什么不工作背后的困惑。

    来自模式文档:

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

    replacereplaceAll 都替换了字符串中的所有匹配项,但只有 replaceAll 接受正则表达式。您传入的 "\\u00A3" 将作为模式工作,但由于添加了反斜杠,因此不是 unicode 文字。如前所述,要么使用 unicode 文字或实际符号替换,要么更改为 replaceAll

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      • 1970-01-01
      • 2022-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多