önce

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

Benim çözümlenen değer şimdi 1,172 ve ben iki katına dönüştürmek istediğiniz kadar iki katına çıkarmayı dönüştürmek yüzden virgül kaldırmak gerekir.önce

cevap

1

Zaten replaceAll kullandınız, sorun neydi? Sadece katılmadan hiçbir değiştirmeler - Sen noob önerdiği gibi

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

IDEONE DEMO

kullanmak zorunda, ayrıca alternation

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

Bu, akıllıdır ve her iki değiştirmeyi [değiştirme] (https://regex101.com/r/mI9dD5/1) kullanarak bir araya getirebilir. –

+1

@noob Yup siz haklısınız .. – rock321987

+1

@noob Öneriniz doğrultusunda güncellendi – rock321987

0

1. Yaklaşımı kullanabilirsiniz.

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

Yaklaşım # 2 - değiştirmeler, katılmama.

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

orijinal kod ve mayın arasındaki fark muhtemelen biten bir ondalık hesaba çalışıyorum olmasıdır.

Ondalık, bu durumda (ve yerel ayar) anlamlıdır ve bunu yalnızca kesemezsiniz - 100 $ farklı olabilir.

Yani benim ikinci örnekte, iki şeyden türlerine izin bakınız -, dışlamak için bir karakter setinde

0

Kullanım filterNot DOT ondalık ile sonlandırma ondalık sayılar ve dizeleri

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

Scala'daki dize burada karakter dizisi olarak ele alınır, böylece karakter seviyesinde filtreleme uygulayabiliriz. Durum, dahil edilmek üzere.