【问题标题】:What all characters can be used as String Delimiters in Java?Java中哪些字符都可以用作字符串分隔符?
【发布时间】:2014-04-05 17:44:16
【问题描述】:

我正在尝试使用分隔符(“:”)将字符串分成不同的部分。

    String sepIds[]=ids.split(":");

它工作正常。但是当我将“:”替换为“*”并使用“*”作为分隔符时,它不起作用。

    String sepIds[]=ids.split("*"); //doesn't work

它只是挂在那里,不再执行。

我在这里犯了什么错误?

【问题讨论】:

  • *,?很少有其他符号在正则表达式中有特殊含义(查找)。你必须逃避他们“\*”会工作
  • String sepIds[]=ids.split("\\*"); //有效
  • java split function 的可能重复项

标签: java string delimiter


【解决方案1】:

String.split 需要一个正则表达式参数。 * 在正则表达式中有含义。所以如果你想使用它们,那么你需要像这样逃避它们:

String sepIds[]=ids.split("\\*");

【讨论】:

    【解决方案2】:

    String#splitregular expression 作为参数。在正则表达式中,某些字符具有特殊含义,因此需要对其进行转义,例如:

    "foo*bar".split("\\*")
    

    结果会如你所愿:

    [foo, bar]
    

    您也可以使用Pattern#quote 方法来简化任务。

    "foo*bar".split(Pattern.quote("*"))
    

    【讨论】:

      【解决方案3】:

      .split() 的参数是正则表达式,而不是字符串文字。因此,您需要转义 *,因为它是一个特殊的正则表达式字符。写:

      ids.split("\\*");
      

      这是你将如何拆分一个或多个空格:

      ids.split("\\s+");
      

      请注意,Guava 有 Splitter,它非常非常快,并且可以根据文字进行拆分:

      Splitter.on('*').split(ids);
      

      【讨论】:

        【解决方案4】:

        '*' 和 '.'是特殊字符,您必须对其进行黑化处理。

        String sepIds[]=ids.split("\\*");

        要了解更多关于 java 模式的信息,请访问that page.

        【讨论】:

          【解决方案5】:

          这是预期的行为。 documentation for the String split function 表示输入字符串被视为regular expression(带有解释其工作原理的链接)。正如 Germann 指出的那样,“*”是正则表达式中的一个特殊字符。

          【讨论】:

            【解决方案6】:

            Java 的String.split() 使用正则表达式来拆分字符串(与 C# 或 python 中的类似函数不同)。 * 是正则表达式中的特殊字符,您需要使用 \(反斜杠)对其进行转义。所以你应该改用:

            String sepIds[]=ids.split("\\*");
            

            您可以在 Internet 上的任何地方找到有关正则表达式的更多信息,java 支持的特殊字符的完整列表应该在这里:http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

            【讨论】:

              猜你喜欢
              • 2014-06-29
              • 2012-09-04
              • 1970-01-01
              • 2011-12-17
              • 2011-09-12
              • 1970-01-01
              • 1970-01-01
              • 2014-07-29
              • 1970-01-01
              相关资源
              最近更新 更多