【问题标题】:Splitting a Java String by the pipe symbol using split("|")使用 split("|") 通过管道符号拆分 Java 字符串
【发布时间】:2012-06-03 12:00:24
【问题描述】:

Java 官方文档说明:

例如,字符串"boo:and:foo" 使用这些表达式产生以下结果 正则表达式结果 :

{ "boo", "and", "foo" }"

这就是我需要它的工作方式。但是,如果我运行这个:

public static void main(String[] args){
        String test = "A|B|C||D";

        String[] result = test.split("|");

        for(String s : result){
            System.out.println(">"+s+"<");
        }
    }

打印出来:

><
>A<
>|<
>B<
>|<
>C<
>|<
>|<
>D<

这与我的预期相差甚远:

>A<
>B<
>C<
><
>D<

为什么会这样?

【问题讨论】:

标签: java regex string


【解决方案1】:

使用正确的转义:string.split("\\|")

或者,在 Java 5+ 中,使用专门为此目的创建的帮助器 Pattern.quote()

string.split(Pattern.quote("|"))

适用于任意输入字符串。当您需要引用/转义用户输入时非常有用。

【讨论】:

  • 不是 shure 何时进行转换,但在 Java 8 中,可以使用 Pattern.quote()
【解决方案2】:
test.split("\\|",999);

指定 limit 或 max 将 准确 例如:“boo|||a”或“||boo|”或“|||”

test.split("\\|"); 会为相同的示例返回不同长度的字符串数组。

使用参考:link

【讨论】:

    【解决方案3】:

    你需要

    test.split("\\|");
    

    split 使用正则表达式,在 regex 中,| 是表示OR 运算符的元字符。您需要使用 \ 转义该字符(在 String 中写为 "\\",因为 \ 也是字符串文字中的元字符,并且需要另一个 \ 来转义它)。

    你也可以使用

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

    Pattern.quote 创建代表| 的正则表达式的转义版本。

    【讨论】:

    • 是,split() 方法采用正则表达式,| 是正则表达式的特殊字符
    • 你是我作为堆栈溢出版主的第二选择。一切顺利。
    【解决方案4】:

    您也可以使用.split("[|]")

    (我用这个代替了.split("\\|"),这对我不起作用。)

    【讨论】:

    • 两个版本都应该可以正常工作。如果不是,则表明问题出在其他地方。
    • @Pshemo 然而,这确实增加了一种有趣的味道,如果将某些保留符号放在括号内,则不必转义。
    【解决方案5】:

    使用此代码:

    public static void main(String[] args) {
        String test = "A|B|C||D";
    
        String[] result = test.split("\\|");
    
        for (String s : result) {
            System.out.println(">" + s + "<");
        }
    }
    

    【讨论】:

    • 这个解决方案已经被接受的答案指出。无需重复。
    【解决方案6】:

    您也可以使用 apache 库并执行以下操作:

    StringUtils.split(test, "|");
    

    【讨论】:

      【解决方案7】:

      split() 方法将正则表达式作为参数

      【讨论】:

        猜你喜欢
        • 2013-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多