2011-04-02 41 views

Respuesta

27

En su ejemplo, no hace la diferencia, pero el método String#split en Scala realmente toma un String que representa una expresión regular. Así que asegúrese de escapar de ciertos personajes según sea necesario, como p. en "a..b.c".split("""\.\.""") o para hacer ese hecho más obvio, puede llamar al método de división en un RegEx: """\.\.""".r.split("a..b.c").

+1

Ah sí. Estaba convencido de que tomó una Regex o una Char, no una String, por lo que siguió quejándose. –

+10

Sugiero usar '\ Q' y' \ E' en lugar de hacer escapes individuales. Simplemente agregue '\ Q' al principio (o' \\ Q', según sea necesario), y un '\ E' al final. –

+0

@ DanielC.Sobral Gran idea: ¿alguna forma de escapar de una cadena almacenada en una 'var' (constante)? –

12

Esa línea de Ruby debería funcionar igual que en Scala y devolver un Array[String].

76

El REPL es incluso más fácil que Stack Overflow. Acabo de pegar tu ejemplo como está.

Welcome to Scala version 2.8.1.final (Java HotSpot Server VM, Java 1.6.0_22).
Type in expressions to have them evaluated.
Type :help for more information.

scala> "string1::string2".split("::") 
res0: Array[java.lang.String] = Array(string1, string2) 
+4

esta debería ser la respuesta. La estrategia de Moritz de crear un regex funciona, pero esta solución simple es mejor. – iwein

+4

tan scala> ruby ​​ –

+0

esta respuesta en realidad responde a la pregunta; la respuesta actualmente aceptada describe una teoría que podría funcionar, pero no describe la respuesta real a la pregunta formulada. –

2

Si nos fijamos en la Java implementation se ve que el parámetro a String#split será, de hecho, compilado a una expresión regular.

No hay problema con "string1::string2".split("::") porque ":" es solo un caracter en una expresión regular, pero por ejemplo "string1|string2".split("|") no dará el resultado esperado. "|" es el símbolo especial de alternancia en una expresión regular.

scala> "string1|string2".split("|") 
res0: Array[String] = Array(s, t, r, i, n, g, 1, |, s, t, r, i, n, g, 2) 
Cuestiones relacionadas