2016-04-03 37 views
-1
val value = "€1,172" 
val parsed = value.replaceAll("\\p{Sc}", "") 

マイ解析された値が今1,172であると私はので、私はカンマを削除する必要が倍増することを変換したい倍増を変換する前に、解析された文字列からカンマを削除します。は、それが

答えて

1

すでにreplaceAllを使用していた場合、何が問題だったのですか?ちょうど入社、無交換 - あなたはnoobによって示唆されるように

val value = "€1,172" 
val parsed = value.replaceAll("\\p{Sc}", "").replaceAll(",", "").toDouble 

IDEONE DEMO

を使用する必要があり、あなたもalternation

val value = "€1,172.46" 
val parsed = value.replaceAll("\\p{Sc}|,", "").toDouble 
+1

これは巧妙であり、両方を組み合わせて[alteration](https://regex101.com/r/mI9dD1/1)を使って置き換えることができます。 –

+1

@noobはい、あなたは正しいです.. – rock321987

+1

@noobあなたの提案に従って更新 – rock321987

0

アプローチ#1を使用することができます。

val regex = "[(\\d*)(?:.)*?](\\.\\d{0,2})?" 
val result = regex.r.findAllIn(value).mkString("") 

接近#2 - 置換、結合なし。

val regex = "[^\\d(?:\\.\\d{0,2})?]" 
val result = regex.r.replaceAllIn(value, "") 

元のコードと私の違いは、可能であれば小数点の終了を考慮しようとしていることです。

小数点はその場合(ロケール)意味があり、それを切り落とすことはできません。$ 100の違いがあります。

だから私の第二の例では、あなたは私は二つのタイプの許可を参照 - 小数、および除外するための文字の集合にDOT DECIMAL DECIMAL

0

使用filterNotで終了する文字列を、

value.filterNot(Set('€', ',')(_)) 

Scalaの文字列は文字列として扱われるため、文字レベルでフィルタリングを適用することができます。条件はセットに含まれています。