围绕'|'拆分java中的字符串字符

时间:2012-04-15 06:46:46

标签: java string split

我有这个

String str = "a,pnp,a|pnp,lab2|pnp,a|pnp,lab2,utr,utr";
String[] strings = str.split("|");

此代码不会拆分“|”相反,它会分割每个字符,如

strings[0] == "a";
strings[1] == ",";

等等。

如何让这个工作得到

strings[0] == "a,pnp,a"
strings[1] == "pnp,lab2"
...

5 个答案:

答案 0 :(得分:6)

split()采用正则表达式,|保留用于正则表达式OR,因此您需要将其转义:

String[] strings = str.split("\\|");

甚至更好:

String[] strings = str.split(Pattern.quote("|"));

答案 1 :(得分:1)

使用

String[] strings = str.split("\\|");

答案 2 :(得分:1)

您可以逃避|符号,正如其他答案所示。我个人建议下载Guava并使用Splitter代替。虽然这可能被视为单一陈述的过度杀伤,但根据我的经验,这将是一个罕见的项目,不能被各种番石榴更具可读性。

如果可能,我个人会使用列表而不是数组,所以:

private static final Splitter PIPE_SPLITTER = Splitter.on('|');
...

// Or an immutable list if you don't plan on changing it afterwards
List<String> strings = Lists.newArrayList(PIPE_SPLITTER.split(str));

我可能对正则表达式过度过敏,但我真的不喜欢使用处理正则表达式的API,除非我真的试图使用保证的模式它们。

答案 3 :(得分:0)

public String [] split(String regex)

将此字符串拆分为给定正则表达式的匹配项。

此方法的工作方式就像调用带有给定表达式和limit参数为零的双参数split方法一样。因此,尾随空字符串不包含在结果数组中。

所以,你应该尝试String [] arrayOfStrings = str.split(“\ |”);

答案 4 :(得分:0)

只需添加转义|字符的选项:

String[] strings = str.split("[|]");