【发布时间】:2014-09-25 02:45:47
【问题描述】:
我正在尝试按如下方式拆分字符串
String string = "mike|ricki"
如果我执行以下string.split("|"),我会期望一个包含 2 个元素的数组,"mike" 和 "ricki"。相反,我得到以下
[, m, i, k, e, |, r, i, c, k, i]
我在这里做错了什么吗?
【问题讨论】:
我正在尝试按如下方式拆分字符串
String string = "mike|ricki"
如果我执行以下string.split("|"),我会期望一个包含 2 个元素的数组,"mike" 和 "ricki"。相反,我得到以下
[, m, i, k, e, |, r, i, c, k, i]
我在这里做错了什么吗?
【问题讨论】:
是的。管道字符| 是正则表达式中的特殊字符。您必须使用\ 对其进行转义。转义字符串为\|,但在Java 中,反斜杠\ 是文字字符串中转义的特殊字符,因此您必须对其进行双重转义并使用\\|:
String[] names = string.split("\\|");
System.out.println(Arrays.toString(names));
【讨论】:
如果您阅读 String.split() Java 文档,它会说它可以接收正则表达式作为输入。
管道字符| 是正则表达式中的一个特殊字符,所以如果你想将它用作文字,你必须像\\| 一样对其进行转义
所以你的代码必须是:
String[] splitted = string.split("\\|");
编辑:更正了示例代码。
【讨论】:
String.split 采用正则表达式。管道字符在正则表达式中具有特殊含义,因此它与您预期的不匹配。
改用String.split("\\|")。
反斜杠告诉正则表达式将管道视为文字字符。
【讨论】: