2016-06-08 28 views

risposta

7

C'è una grande differenza nell'uso della funzione.

La funzione split è sovraccarico, e questo è l'attuazione del codice sorgente di Scala:

/** Per ogni linea in questa stringa:

  • striscia prefisso principale costituito da spazi vuoti o caratteri di controllo
  • seguito da | dalla linea.

*/

def stripMargin: String = stripMargin('|') 

    private def escape(ch: Char): String = "\\Q" + ch + "\\E" 

    @throws(classOf[java.util.regex.PatternSyntaxException]) 
    def split(separator: Char): Array[String] = toString.split(escape(separator)) 

    @throws(classOf[java.util.regex.PatternSyntaxException]) 
    def split(separators: Array[Char]): Array[String] = { 
    val re = separators.foldLeft("[")(_+escape(_)) + "]" 
    toString.split(re) 
    } 

Così, quando si sta chiamando split() con un char, vi chiedo di raggruppati per quello specifico char:

scala> "ASD-ASD.KZ".split('.') 
res0: Array[String] = Array(ASD-ASD, KZ) 

E quando si sta chiamando split() con una stringa, significa che si desidera eseguire un'espressione regolare. Quindi, per voi per ottenere il risultato esatto utilizzando le virgolette, è necessario fare:

scala> "ASD-ASD.KZ".split("\\.") 
res2: Array[String] = Array(ASD-ASD, KZ) 

Dove:

  • Prima \ sfugge il carattere seguente
  • Seconda \ sfugge il carattere per il punto che è un'espressione regolare e vogliamo utilizzarla come carattere
  • . - il carattere per dividere la stringa per
Problemi correlati