array string scala split standard-library scala-string

string - array - ¿Hay una combinación de takeWhile, dropWhile en Scala?



scala string concat (2)

En Scala, quiero dividir una cadena en un personaje específico como ese:

scala> val s = "abba.aadd" s: String = abba.aadd scala> val (beforeDot,afterDot) = (s takeWhile (_!=''.''), s dropWhile (_!=''.'')) beforeDot: String = abba afterDot: String = .aadd

Esta solución es ligeramente ineficiente (tal vez no asintóticamente), pero tengo la sensación de que algo así podría existir en la biblioteca estándar. ¿Algunas ideas?


Puedes usar splitAt para lo que quieras:

val s = "abba.aadd" val (before, after) = s.splitAt(s.indexOf(''.''))

Salida:

before: String = abba after: String = .aadd


Hay un método de span :

scala> val (beforeDot, afterDot) = s.span{ _ != ''.'' } beforeDot: String = abba afterDot: String = .aadd

De la documentación de Scala :

c span p es equivalente (pero posiblemente más eficiente que) (c takeWhile p, c dropWhile p) , siempre que la evaluación del predicado p no cause ningún efecto secundario.