一、用例子来说明
1、单个分隔符占据第1个位置
@Test
public void test() {
String str = "_1";
String[] s = str.split("_");
for (int i = 0; i < s.length; i++) {
System.out.println(s[i]);
}
}
结果:
1
注意:
1上面的空行中是一个空字符串,不是我打错了
2、多个分隔符连续占据最前面的多个位置
@Test
public void test() {
String str = "___1";
String[] s = str.split("_");
for (int i = 0; i < s.length; i++) {
System.out.println(s[i]);
}
}
结果:
1
注意:
1上面的多个空行中都是一个单一的空字符串,不是我打错了
3、单个分隔符占据最后一个位置
@Test
public void test() {
String str = "1_";
String[] s = str.split("_");
for (int i = 0; i < s.length; i++) {
System.out.println(s[i]);
}
}
结果:
1
4、多个分隔符连续占据最后面的多个位置
@Test
public void test() {
String str = "1___";
String[] s = str.split("_");
for (int i = 0; i < s.length; i++) {
System.out.println(s[i]);
}
}
结果:
1
5、被分割的字符串中间有多个连续分隔符,但是后面以非分隔符结尾
@Test
public void test() {
String str = "1___2";
String[] s = str.split("_");
for (int i = 0; i < s.length; i++) {
System.out.println(s[i]);
}
}
结果:
1
2
注意:
中间的那几行里面都是单个空白字符串
6、说明例1和例2
中存在的问题
有的时候例1和例2中的效果就是我们想要的效果,但是有的时候不是,可能大多数都不是吧,比如进行价格区间查找的时候,小于8000元的价格区间我会用_8000
这种方式来传到后端,后端解析的时候就会遇到空字符串这种问题,我的解决办法是判断字符串分割之后的数组的大小是否是2,并且第一个为空,如果是的,那么这就是我想要的值,我暂时无法做到分割之后让数组中只有一个8000而没有空字符串这种做法,我的做法就是一种折中的做法,大家可以参考
7、解决例3和例4
存在的问题
说明:
有的时候例4中的效果就是我们想要的效果,但是有的时候不是,即使分隔符后面是空字符串,但是这些空字符串可以帮助我们计数,比如我们要计算被分割符分割之后的数目,那么这些空字符串也要计算在内,所以我们需要解决例3和例4
存在的问题
做法1:
@Test
public void test() {
String str = "1___";
String[] s = str.split("_", -1);
for (int i = 0; i < s.length; i++) {
System.out.println(s[i]);
}
}
做法2:
@Test
public void test() {
String str = "1___";
String[] s = str.split("_", 10);
for (int i = 0; i < s.length; i++) {
System.out.println(s[i]);
}
}
结果:
1
解释:
split()方法中可以有两个参数,其中第二个参数大家用的不多,官方解释对第二个参数的解释如下:
@param limit
the result threshold, as described above
中文解释就是如上所述的结果阈值
然后菜鸟教程中的解释是:
limit:可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。
简单来说就是可以设置返回数组的最大值,例如不加限制的时候分割之后的数组大小是10,但是我添加了限制是5,那么返回的数组大小就是5,这就是limit的含义,至于它为什么能解决我们的问题,我是这样考虑的,在默认不加限制的情况下匹配到后面发现后面全部都是空字符串,因此官方就不让这些空字符串添加到返回数组中了,他们认为这是没有意义的,而添加limit之后就会按照limit的限制次数去进行分割,即使后面都是空字符串,也是会返回的,这相当于是官方关闭了一扇门,又给我们打开了一扇窗,如果你能确定分割字符串形成的数组大小,那你可以在limit处写一个确定的值,例如上面的10,如果你不能确定,那你就写一个-1吧,这个应该代表无穷大,部分思想来自于另外一个博主,博文地址是:String.split()遇到空字符串的几种情况