/ / Diferencia entre dividir una cadena con carácter y cadena en scala - cadena, scala, dividir, carácter

Diferencia entre dividir una cadena con carácter y cadena en scala - string, scala, split, character

Estoy dividiendo una cadena basada en una tubería | personaje en scala. Veo dos opciones diferentes para hacer esto. Me sorprende ver que obtuve dos resultados diferentes en diferentes escenarios.

Mira esto:

enter image description here

En el caso de la cadena, también devolvió el carácter de canalización, mientras que en el caso de la cadena devolvió los resultados como se esperaba.

Tengo curiosidad por saber la diferencia entre ambos.

Respuestas

4 para la respuesta № 1

La cosa es cuando estás proporcionando un String este parámetro String Puede ser una expresión regular. Y | Es un personaje especial en el mundo de las expresiones regulares.

Esto será más claro para usted después del siguiente ejemplo,

scala> val s1 = "abcdef"
s1: String = abcdef

scala> s1.split("|")
res7: Array[String] = Array(a, b, c, d, e, f)

Si quieres obtener el resultado deseado tendrás que escapar. | utilizando \

scala> val s1 = "abcdef"
s1: String = abcdef

scala> s1.split("\|")
res7: Array[String] = Array(abcdef)

2 para la respuesta № 2

En caso de cuerda necesita escapar. utilizar "\|" en lugar de "|"

scala> "a|b|c|d".split("|")
res19: Array[String] = Array(a, |, b, |, c, |, d)

scala> "a|b|c|d".split("\|")
res20: Array[String] = Array(a, b, c, d)

scala> "a|b|c|d".split("|")
res21: Array[String] = Array(a, b, c, d)

scala> "a|b|c|d".split("""|""")
res23: Array[String] = Array(a, b, c, d)

1 para la respuesta № 3

Algunas formas más de escapar de una expresión regular:

scala> "a|b|c|d".split(raw"|")
res114: Array[String] = Array(a, b, c, d)

scala> "a|b|c|d".split(raw"Q|")
res115: Array[String] = Array(a, b, c, d)

scala> "a|b|c|d".split("""Q|""")
res116: Array[String] = Array(a, b, c, d)

scala> "a|b|c|d".split("\Q|")
res117: Array[String] = Array(a, b, c, d)

Tenga en cuenta que las variables se interpolan en raw cuerdas, por lo que hay que tener cuidado con $.

Q es particularmente útil cuando tienes varios personajes para escapar y no quieres poner una barra invertida antes de cada uno de ellos.