首页 > 解决方案 > 如何从scala中的字符串中提取带小数的数字?

问题描述

从带小数的字符串中提取数字:

 1.8 min

如何获得 1.8

replaceAll("\\D+","")) gives 18 string but not 1.8

标签: scalafunctional-programming

解决方案


Regex只是删除所有非数字字符。但是,数字的十进制表示不是一系列数字,它是一系列数字,后跟一个小数分隔符(.在美国、,德国等),然后是另一个数字系列。那里可能还有数千个分隔符(,在美国,.或者在德国,'在其他一些国家,等等)。此外,小数部分可能是可选的。

您必须决定要处理多少复杂性。

让我们找一个中间部分:可选的小数部分,没有千位分隔符:

private final val decimal = """(?<value>\d+[.,]?\d*)""".r.unanchored

"1,8 min" match { 
  case decimal(value) => BigDecimal(value.replace(",", "."))
  case _              => BigDecimal(0)
}

推荐阅读