【发布时间】:2011-04-02 10:20:17
【问题描述】:
在 Ruby 中,我做到了:
"string1::string2".split("::")
在 Scala 中,我找不到如何使用字符串而不是单个字符来 split。
【问题讨论】:
在 Ruby 中,我做到了:
"string1::string2".split("::")
在 Scala 中,我找不到如何使用字符串而不是单个字符来 split。
【问题讨论】:
REPL 比 Stack Overflow 更容易。我只是按原样粘贴了您的示例。
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)
【讨论】:
"aaaaa".split("a") => List("", "", "", "", "", "")——在大多数情况下,它没有提供任何有用的信息。宁愿解释为空。
在您的示例中,它没有什么区别,但 Scala 中的 String#split 方法实际上采用了代表正则表达式的 String。因此,请务必根据需要转义某些字符,例如在"a..b.c".split("""\.\.""") 中或者为了使这一事实更明显,您可以在RegEx 上调用split 方法:"""\.\.""".r.split("a..b.c")。
【讨论】:
\Q 和\E 而不是单独转义。只需在开头添加\Q(或\\Q,根据需要),然后在末尾添加\E。
var(常量)中的字符串?
scala.util.matching.Regex.quote,或者Java的等效方法。
java.util.regex.Pattern.quote(str) 会对任意字符串文字(用 \Q 和 \E 包围)执行此操作。
Ruby 的那一行应该像在 Scala 中一样工作,并返回 Array[String]。
【讨论】:
如果您查看Java implementation,您会发现String#split 的参数实际上将被编译为正则表达式。
"string1::string2".split("::") 没有问题,因为“:”只是正则表达式中的一个字符,但例如"string1|string2".split("|") 不会产生预期的结果。 “|”是正则表达式中交替的特殊符号。
scala> "string1|string2".split("|")
res0: Array[String] = Array(s, t, r, i, n, g, 1, |, s, t, r, i, n, g, 2)
【讨论】: