在 Ruby 中,我执行了:
"string1::string2".split("::")
在Scala中,我找不到如何使用字符串而不是单个字符进行split
(分割)。
REPL比Stack Overflow更容易。我只是按原样粘贴了您的示例。
欢迎使用Scala版本2.8.1.final(Java HotSpot Server VM,Java 1.6.0_22)。
输入表达式以对其进行评估。
键入 :help 获取更多信息。
scala> "string1::string2".split("::")
res0: Array[java.lang.String] = Array(string1, string2)
在你的例子中没有影响,但是Scala中的String#split
方法实际上需要一个表示正则表达式的String
。因此,请确保根据需要转义某些字符,例如在"a..b.c".split("""\.\.""")
中,或者为了使这个事实更加明显,您可以在RegEx
上调用split方法:"""\.\.""".r.split("a..b.c")
。
\Q
和\E
代替逐个转义。只需在开头添加\Q
(或根据需要添加\\Q
),在结尾处添加\E
即可。 - Daniel C. Sobralvar
(常量)中的字符串? - Brent Faustscala.util.matching.Regex.quote
,或者是Java的等效方法。 - Daniel C. Sobraljava.util.regex.Pattern.quote(str)
可以将任意字符串字面量转换为正则表达式(用\Q和\E括起来)。 - Brent Faust这行 Ruby 代码在 Scala 中应该也能正常工作,并返回一个 Array[String]
。
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)
"aaaaa".split("a")
=>List("", "", "", "", "", "")
-- 对于大多数情况来说并没有提供任何有用的信息。更愿意将其解释为空。 - A---