web-dev-qa-db-fra.com

Comment diviser une chaîne par une chaîne en Scala

Dans Ruby, j'ai fait:

"string1::string2".split("::")

Dans Scala, je ne trouve pas comment split en utilisant une chaîne, pas un seul caractère.

23
Félix Saparelli

Dans votre exemple, cela ne fait aucune différence, mais la méthode String#split Dans Scala prend en fait un String qui représente une expression régulière. Assurez-vous donc de vous échapper certains caractères selon les besoins, comme par exemple dans "a..b.c".split("""\.\.""") ou pour rendre ce fait plus évident, vous pouvez appeler la méthode de fractionnement sur un RegEx: """\.\.""".r.split("a..b.c").

30
Moritz

Le REPL est encore plus facile que Stack Overflow. Je viens de coller votre exemple tel quel.

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)
78
Janx

Cette ligne de Ruby devrait fonctionner comme dans Scala aussi et retourner un Array[String].

12
Fabian Steeg

Si vous regardez implémentation Java vous voyez que le paramètre de String#split Sera en fait compilé en une expression régulière.

Il n'y a pas de problème avec "string1::string2".split("::") car ":" est juste un caractère dans une expression régulière, mais par exemple "string1|string2".split("|") ne donnera pas le résultat attendu. "|" est le symbole spécial de l'alternance dans une expression régulière.

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