【问题标题】:How to split a string by a string in Scala如何在Scala中用字符串拆分字符串
【发布时间】:2011-04-02 10:20:17
【问题描述】:

在 Ruby 中,我做到了:

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

在 Scala 中,我找不到如何使用字符串而不是单个字符来 split

【问题讨论】:

    标签: string scala split


    【解决方案1】:

    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)
    

    【讨论】:

    • 这应该是答案。 Moritz 创建正则表达式的策略有效,但这种简单的解决方案更好。
    • 这个答案实际上回答了这个问题;当前接受的答案描述了一个可行的理论,但没有描述对所提问题的实际答案。
    • 拆分有一个问题:当你尝试 "::".split("::") 你得到 Nil,但应该 List("","")
    • @Vitamon 如果是这样,那么"aaaaa".split("a") => List("", "", "", "", "", "")——在大多数情况下,它没有提供任何有用的信息。宁愿解释为空。
    【解决方案2】:

    在您的示例中,它没有什么区别,但 Scala 中的 String#split 方法实际上采用了代表正则表达式的 String。因此,请务必根据需要转义某些字符,例如在"a..b.c".split("""\.\.""") 中或者为了使这一事实更明显,您可以在RegEx 上调用split 方法:"""\.\.""".r.split("a..b.c")

    【讨论】:

    • 啊,是的。我确信它需要一个正则表达式或一个字符,而不是一个字符串,所以它一直在抱怨。
    • 我建议使用\Q\E 而不是单独转义。只需在开头添加\Q(或\\Q,根据需要),然后在末尾添加\E
    • @DanielC.Sobral 好主意 - 有什么方法可以转义存储在 var(常量)中的字符串?
    • @Rubistro 你可以使用scala.util.matching.Regex.quote,或者Java的等效方法。
    • @DanielC.Sobral 我发现java.util.regex.Pattern.quote(str) 会对任意字符串文字(用 \Q 和 \E 包围)执行此操作。
    【解决方案3】:

    Ruby 的那一行应该像在 Scala 中一样工作,并返回 Array[String]

    【讨论】:

      【解决方案4】:

      如果您查看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)
      

      【讨论】:

        猜你喜欢
        • 2017-06-06
        • 2011-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-11
        相关资源
        最近更新 更多