我有这个
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"
...
答案 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("[|]");