【问题标题】:String.Split - Unexpected behaviour [duplicate]String.Split - 意外行为[重复]
【发布时间】:2014-09-25 02:45:47
【问题描述】:

我正在尝试按如下方式拆分字符串

String string = "mike|ricki"

如果我执行以下string.split("|"),我会期望一个包含 2 个元素的数组,"mike""ricki"。相反,我得到以下

[, m, i, k, e, |, r, i, c, k, i]

我在这里做错了什么吗?

【问题讨论】:

标签: java string


【解决方案1】:

是的。管道字符| 是正则表达式中的特殊字符。您必须使用\ 对其进行转义。转义字符串为\|,但在Java 中,反斜杠\ 是文字字符串中转义的特殊字符,因此您必须对其进行双重转义并使用\\|

String[] names = string.split("\\|");
System.out.println(Arrays.toString(names));

【讨论】:

    【解决方案2】:

    如果您阅读 String.split() Java 文档,它会说它可以接收正则表达式作为输入。

    管道字符| 是正则表达式中的一个特殊字符,所以如果你想将它用作文字,你必须像\\| 一样对其进行转义

    所以你的代码必须是:

    String[] splitted = string.split("\\|");
    

    编辑:更正了示例代码。

    【讨论】:

    • -1:您的答案是正确的,直到您在答案末尾添加了那行非常奇怪的代码=\。您需要转义正则表达式,而不是您将应用正则表达式的字符串。
    • 您不需要更改原始字符串,只需要您在拆分中匹配的正则表达式
    • 起来!我会改正的。
    【解决方案3】:

    String.split 采用正则表达式。管道字符在正则表达式中具有特殊含义,因此它与您预期的不匹配。

    改用String.split("\\|")

    反斜杠告诉正则表达式将管道视为文字字符。

    【讨论】: