split作用不是将s以"|"为间隔分成几个小的字符串吗,我这里为什么直接被分成一个一个小的字符了?
竖线需要转义一下才行
String[] str = str.split("\\|");
需要转义才能使用,先不说转义,在Java中,split("|")
是正则表达式中的一种特殊用法,它表示空字符串或者任何字符(相当于正则表达式中的"或"操作符"|"),会把原字符串按照空字符或者任意字符进行分割。
实际上,这种用法是不正确的,因为在正则表达式中"|"字符是具有特殊含义的元字符,表示逻辑上的或操作符,因此需要对其进行转义才可以正确地使用。
正常情况下,使用split("\\|")
来实现分割的需求,其中"\"是对"|"进行转义,表示把"|"字符本身作为分隔符来进行分割。
1. 注意 特殊字符作为分隔符时需要使用\\进行转义(比如使用\\作为分隔符的话,则转义为\\\\)
特殊字符有 .$|()[{^?*+\\
2.注意对最后空字符的处理(通常有些情况在最后数据为空的时候只保留了个分隔符,如果不做处理的话,数据分割后的个数会偏离预期)
String str = "a|b|c|"; //注意这里在最后多了一个|分隔符
String[] strArr = str.split("\\|");
System.out.println(strArr.length); //这里输出3
for (int i = 0; i < strArr.length; ++i){
System.out.println(strArr[i]);//这里输出a b c
}
如果你需要保留最后一个空字符的数据,则需要将split的第二个参数设置为-1
String str = "a|b|c|";//注意这里在最后多了一个|分隔符
String[] strArr = str.split("\\|",-1);//这里将第二个参数设置为-1
System.out.println(strArr.length); //这里输出4
for (int i = 0; i < strArr.length; ++i){
System.out.println(strArr[i]);//这里输出a b c 空字符串
}