私はちょっとしたヘルパーメソッドを持っています。これはお金の値を正規化する必要があります。したがって、私はいくつかの正規表現を書いています。正規表現は、それらを表現するさまざまな方法を検出する必要があります。不思議なことに、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.")
}
}
Regex.findAllIn(..)を押す
また興味深いのは、次の可能性がありますエラーメッセージをデバッガで:
スカラバージョン2.11.8を使用します。
私は確かに何かを見落とすために困惑しています。ヒントありがとう。
スクリーンショットの代わりにコードスニペットを使用してください。貢献者が問題を再現するのに役立ちます。 – maasg
@maasg:ちょうどコードスニペットを追加しました – andreas