【问题标题】:Splitting a String with the pipe symbol as delimiter使用管道符号作为分隔符拆分字符串
【发布时间】:2013-02-19 23:28:59
【问题描述】:

为什么下面的输出是[]而不是[1]

String input="1|2|3";
String[] values= input.split("|");
System.out.println("[" + values[0] + "]");
// Output: []

但是,如果我们更改分隔符,则输出为[1]

String input="1;2;3";
String[] values= input.split(";");
System.out.println("[" + values[0] + "]");
// Output: [1]

【问题讨论】:

  • split(String) 采用“正则表达式字符串”,因此 | 被解释为“正则表达式或”,因此它不会拆分任何内容。您应该通过转义 | 并检查 values 的值来进行测试
  • 它确实拆分了每个字符,加上一个初始的空字符串

标签: java string split


【解决方案1】:

尝试转义该字符:

String input="1|2|3";
String[] values= input.split("\\|");
System.out.println("[" + values[0] + "]");

【讨论】:

    【解决方案2】:

    因为| 在正则表达式中有特殊含义。你需要像这样转义它:\|,在 Java 中你还必须转义反斜杠,所以你最终会得到 \\|

    管道字符是一个析取运算符,这意味着它告诉正则表达式引擎选择它的左侧和右侧的任一模式。在您的情况下,那些匹配任何内容的空字符串。

    【讨论】:

      【解决方案3】:

      split 方法接收一个正则表达式作为参数。管道是一个保留字符,有自己的用途(表示or)。

      您可以转义它 ("\\|"),或者,如果您使用的是 Java 1.5+,您可以像这样使用 Pattern.quote("|")

      input.split(Pattern.quote("|"));
      

      【讨论】:

        【解决方案4】:

        在拆分时尝试使用\\| 而不是|,因为您需要对其进行转义。

        因此您的代码将更改为:

        String input="1|2|3";
        String[] values= input.split("\\|");
        System.out.println("[" + values[0] + "]");
        

        【讨论】:

        • 这不会编译,请检查您的代码。在java中你需要双重转义,split("\\|")。
        • @bmorris591 答案已修改。对不起,我忘记了!
        【解决方案5】:

        你必须转义字符'|'正确的

        String input="1|2|3";
                String[] values= input.split("\\|");
                System.out.println("[" + values[0] + "]");
        

        【讨论】:

          【解决方案6】:

          管道字符相当于正则表达式中的逻辑或。如果您真的想使用管道字符作为分隔符,则需要使用 \ 将其转义,如

          String[] values= input.split("\|");

          【讨论】:

          • 这不会编译,请检查您的代码。在java中你需要双重转义,split("\\|").
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-29
          相关资源
          最近更新 更多