2013-11-03 8 views
5

Ich habe eine Zeichenfolge, die wie folgt aussieht:Scala wiederum durch Kommas getrennten Zeichenfolge Array

"1,100,53,5000,23,3,3,4,5,5"

Ich möchte diese Elemente in einem Array von unterschiedlichen Integer zu einfach machen. Etwas, das wie folgt aussehen würde:

Array(1, 100, 53, 5000, 23, 3, 4, 5) 

Gibt es eine String Methode in Scala, die dabei helfen würde?

Antwort

9
scala> "1,100,53,5000,23,3,3,4,5,5".split(",").map(_.toInt).distinct 
res1: Array[Int] = Array(1, 100, 53, 5000, 23, 3, 4, 5) 

Offensichtlich löst dies eine Ausnahme aus, wenn einer der Werte im Array keine Ganzzahl ist.

edit: Hatte nicht die 'eindeutige Zahlen nur' Teil gesehen, meine Antwort behoben.

2

zusätzlicher Typ für die Zeichenfolge Überprüfung ist parseable als Int:

package load.data 

object SplitArray { 

    def splitArrayintoString(s: String): Set[Int] = 
    { 
     val strArray = s.split(",") 
     strArray filter isParseAbleAsInt map (_.toInt) toSet 
    } 

    private def isParseAbleAsInt(str: String): Boolean = 
    str.forall(Character.isDigit(_)) 

} 
7

Eine andere Version, die sich gut mit nicht parseable Werte behandelt und ignoriert sie einfach.

scala> "1,100,53,5000,will-not-fail,23,3,3,4,5,5".split(",").flatMap(maybeInt => 
    scala.util.Try(maybeInt.toInt).toOption).distinct 
res2: Array[Int] = Array(1, 100, 53, 5000, 23, 3, 4, 5) 
Verwandte Themen