2016-07-30 7 views
0

Ich habe Währung Zeichenfolge, die ich in Double Wert umwandeln möchten:Scala Währungsbetrag analysieren und entfernen Sie die Währung unterzeichnen

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

parsed = 181.13 kr 

Dieses Beispiel nicht arbeiten, aber in diesem Fall das funktioniert gut:

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

parsed = 11.22 
+0

Verwenden Sie nicht 'Double' oder' Float' für Währung ... – Jubobs

+0

Warum nicht? Ich möchte mehrere Werte berechnen –

+0

Josh Bloch erklärt das Problem besser als ich in Punkt 48 von Effective Java. – Jubobs

Antwort

1

Trotz der Frage, ob Double oder Float für die Währung zu verwenden: \p{Sc} stimmt nicht mit kr überein, weil es kein Währungssymbol ist. Fügen Sie \p{L} hinzu, um beliebigen Buchstaben zu entsprechen ("€" könnte in einigen Fällen "EUR" sein).

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

Es ist effektiver, eine Zeichenklasse zu verwenden. Außerdem denke ich, dass Sie auch Leerzeichen filtern müssen, um die resultierende Zahl sofort in ein 'BigDecimal' konvertieren zu können. Daher lautet die Regex: '[\\ p {Sc} \\ p {L} \\ p {Zs},]' – Kolmar

Verwandte Themen