我有这个
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"
...
split()
接受正则表达式,并|
为正则表达式 OR 保留,因此您需要对其进行转义:
String[] strings = str.split("\\|");
甚至更好:
String[] strings = str.split(Pattern.quote("|"));
利用
String[] strings = str.split("\\|");
|
正如其他答案所示,您可以转义该符号。我个人建议下载番石榴并Splitter
改用。虽然这可能被视为单个语句的过度杀伤,但根据我的经验,这将是一个罕见的项目,无法通过 Guava 的各个部分使其更具可读性。
如果可能的话,我个人会使用列表而不是数组,所以:
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,除非我真的试图使用保证它们的模式。
公共字符串 [] 拆分(字符串正则表达式)
围绕给定正则表达式的匹配拆分此字符串。
此方法的工作方式就像通过使用给定表达式和零限制参数调用双参数拆分方法一样。因此,尾随的空字符串不包含在结果数组中。
所以,你应该试试 String[] arrayOfStrings = str.split("\|");
只是添加到转义|
字符的选项中:
String[] strings = str.split("[|]");