2016-07-30 9 views
0

を削除:Scalaは、通貨量を解析し、私は<code>Double</code>値に変換する通貨文字列持つ通貨記号

val num = "181.13 kr" 
val parsed = num.replaceAll("\\p{Sc}|,", "") 

parsed = 181.13 kr 

この例では、動作していないが、この場合には、これは正常に動作します:

val num = "€11.22" 
val parsed = num.replaceAll("\\p{Sc}|,", "") 

parsed = 11.22 
+0

通貨に「Double」または「Float」を使用しないでください。 – Jubobs

+0

どうしてですか?私はいくつかの値を計算したい –

+0

ジョシュ・ブロッホは、効果的なJavaの48項で問題をより良く説明しています。 – Jubobs

答えて

1

質問にもかかわらず、通貨にDoubleまたはFloatを使用するかどうか:\p{Sc}は通貨記号ではないため、krと一致しません。任意の文字に一致するように\p{L}を追加します(「€」は場合によっては「EUR」になる可能性があります)。

val parsed = num.replaceAll("\\p{Sc}|\\p{L}|,", "") 
+0

文字クラスを使用する方が効果的です。また、結果の数値を 'BigDecimal'に変換できるようにするには、スペース文字もフィルタリングする必要があります。正規表現は次のようになります: '[\\ p {Sc} \\ p {L} \\ p {Zs}、]' – Kolmar