2015-08-13 15 views
5

la mia applicazione accetta una stringa come questa (-110,23, -111.9543633) Ho bisogno di convalidare/recuperare all'interno dello script di scala che la stringa sia numerica o no?Come convalido un carattere numerico in scala?

+0

Si prega di chiarire se si desidera per convertire in 'Int' o' Double', o piuttosto bisogno di controllare se un 'String' può essere convertito in un tipo che ha un' Numeric implicito [_] ' –

+0

Supponiamo che il mio input arrivi come" 111 "quindi numerico per sollevare una bandiera dicendo il suo numerico, o lo stesso nel caso in cui l'input sia come "-78" ma se il mio input è come "111.67" ho bisogno di alzare il flag come decimale. – yash

risposta

0

Ho provato questo e il suo bel lavoro:

val s = "-1112,12" s.isNumeric & & (s.contains() == false '')

9

consideri scala.util.Try per la cattura possibili eccezioni a convertire una stringa su un valore numerico, come segue,

Try("123".toDouble).isSuccess 
Boolean = true 

Try("a123".toDouble).isSuccess 
Boolean = false 

Al facilità di uso, considerare questo implicito,

implicit class OpsNum(val str: String) extends AnyVal { 
    def isNumeric() = scala.util.Try(str.toDouble).isSuccess 
} 

Quindi

"-123.7".isNumeric 
Boolean = true 

"-123e7".isNumeric 
Boolean = true 

"--123e7".isNumeric 
Boolean = false 
+1

prova di cattura per tale controllo è uno spreco di risorse, è possibile controllare direttamente la stringa –

0

Supponendo che si desidera non solo convertire utilizzando Try(x.toInt) o Try(x.toFloat), ma in realtà vogliono un validatore che prende un String e restituire true se e solo se il passato String può essere convertito in un A con implicit evidence: Numeric[A].

Quindi direi: Afaik, no non è possibile. In particolare, dal Numeric non è sigillato. È possibile creare le proprie implementazioni di Numeric

I tipi primitivi come Int, Long, Float, Double possono essere estratti facilmente con un'espressione regolare.

Problemi correlati