2015-08-13 11 views
5

meine Anwendung nimmt eine Zeichenfolge wie folgt (-110,23, -111.9543633) Ich muss innerhalb Scala-Skript überprüfen/abrufen, dass die Zeichenfolge, ob es Numerisch ist oder nicht?Wie validiere ich ein numerisches Zeichen in scala?

+0

Bitte klären, ob Sie wollen um zu 'Int' oder' Double' zu ​​konvertieren, oder besser zu überprüfen, ob ein 'String' in einen Typ konvertiert werden kann, der ein implizites' Numeric [_] ' –

+0

hat. Angenommen, meine Eingabe kommt als" 111 "also numerisch, um ein Flag zu setzen, das seine Zahl sagt, oder dasselbe, wenn die Eingabe wie "-78" kommt, aber wenn meine Eingabe wie "111.67" kommt, muss ich das Flag als Dezimalzahl erhöhen. – yash

Antwort

0

habe ich versucht, diese und seine adaequat:

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

9

Betrachten scala.util.Try für den Fang von möglichen Ausnahmen in einen String auf einen numerischen Wert umwandelt, wie folgt,

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

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

Ab Benutzerfreundlichkeit, betrachten dies implizit,

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

Daher

"-123.7".isNumeric 
Boolean = true 

"-123e7".isNumeric 
Boolean = true 

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

versuchen Sie fangen für eine solche Überprüfung ist eine Verschwendung von Ressourcen, können Sie die Zeichenfolge direkt überprüfen –

0

Angenommen, Sie möchten nicht nur mitkonvertierenoder Try(x.toFloat) aber eigentlich wollen einen Validator, die ein String und zurück true iff die bestandenen String nimmt auf ein A mit implicit evidence: Numeric[A] umgewandelt werden.

Dann würde ich sagen: Afaik, nein ist es nicht möglich. Insbesondere ist Numeric nicht versiegelt. Das heißt, Sie können Ihre eigenen Implementierungen von Numeric

erstellen Primitive Typen wie Int, Long, Float, Double können leicht mit einem regulären Ausdruck extrahiert werden.

Verwandte Themen