/ / Différence entre scinder une chaîne avec caractère et chaîne dans scala - chaîne, scala, scission, caractère

Différence entre la scission d'une chaîne avec un caractère et une chaîne dans scala - chaîne, scala, scission, caractère

Je coupe une ficelle basée sur un tuyau | personnage en scala. Je vois deux options différentes pour le faire. Je suis surpris de voir que j'ai obtenu deux résultats différents dans des scénarios différents.

Regarde ça:

entrer la description de l'image ici

Dans le cas d'une chaîne, il renvoyait également un caractère de canal tandis qu'en cas de caractère, il renvoyait les résultats comme prévu.

Je suis curieux de connaître la différence entre les deux.

Réponses:

4 pour la réponse № 1

La chose est quand vous fournissez un String paramétrer cette String peut être une expression régulière. Et | est un caractère spécial dans le monde des expressions régulières.

Cela deviendra plus clair pour vous après l'exemple suivant,

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

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

Si vous voulez obtenir le résultat souhaité, vous devrez vous échapper. | en utilisant \

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

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

2 pour la réponse № 2

En cas de ficelle, il doit s'échapper. utilisation "\|" au lieu 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 pour la réponse № 3

Quelques autres moyens d'échapper à une expression régulière:

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)

Notez que les variables sont interpolées dans raw cordes, donc il faut faire attention avec $.

Q est particulièrement utile lorsque vous avez plusieurs personnages à échapper et que vous ne voulez pas mettre une barre oblique inverse avant chacun d’eux.