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.