为什么java 根据“|”分割字符串需要使用“\\|” 双反斜杠做特殊处理
在java开发中,常常需要将字符串分隔成字符串数组,再进行操作,比如String str = "aa|bb|cc|||",我们原意是想调用str .split("|")将它根据"|"分隔,预想会分成"aa","bb","cc","","",""6个子串。但实际结果如下:
为什么呢,我们看下jdk原码,String.split的参数是一个正则表达式,而在正则表达式中,| 表示或的意思,它表示匹配左边或右边的内容。而"|"的意思自然就是匹配空了,所以原字符串会被分隔成一个一个的字符。
所以呢,我们需要将|转义,即 以String bArr[] = str.split("\\|");这种形式分隔,但是问题又出现了,预期6个子串,实际得到了3个
再看原码
public String[] split(String regex) { return split(regex, 0); },它实际调用了两参的split方法,而第二个参数说明如下:
就是说第二个参数默认为0,原字符串后面被切割成空串的部分都会被丢弃,当此参数为正数时,最多切割不超过此正数次,为负数时则全部切割,所以如果我们的字符串如果预想切割成6个子串,可以使用以下写法:
String bArr[] = str.split("\\|", -1);