1
我有一个小帮手方法,它必须规范一些货币值。因此,我写了一些正则表达式,它应该检测表示它们的不同方式。奇怪的是,它们只有在与Regex.findAllIn(..)一起使用时才会触发,但如果在匹配大小写语句中使用则不会触发。匹配大小写不像Regex.findAll
val result = extractAmount("23772.90")
def extractAmount(amountStr: String): BigDecimal = {
val Plain = """^\d+$""".r
val Dot = """^(\d+)\.(\d*)$""".r
val Comma = """^(\d+),(\d*)$""".r
val DotComma = """^(\d+)\.(\d+),(\d*)$""".r
val CommaDot = """^(\d+),(\d+)\.(\d*)$""".r
if (Dot.findAllIn(amountStr).hasNext)
println(Dot.findAllIn(amountStr).next())
amountStr match {
case Plain(value) => new java.math.BigDecimal(value)
case Dot(values) => new BigDecimal(s"${values(0)}.${values(1)}")
case Comma(values) => new BigDecimal(s"${values(0)}.${values(1)}")
case DotComma(values) => new BigDecimal(s"${values(0)}${values(1)}.${values(2)}")
case CommaDot(values) => new BigDecimal(s"${values(0)}${values(1)}.${values(2)}")
case _ => throw new RuntimeException(s"Money amount string -->${amountStr}<-- did not match any pattern.")
}
}
使用scala版本2.11.8。
我很困惑,肯定会忽略一些明显的东西。感谢提示。
请使用代码片段而不是截图。它将帮助贡献者重现这个问题。 – maasg
@maasg:刚刚添加了一个代码片段 – andreas