问个简单又纠结的string.split问题
String sour = "1##f####43####43######";
System.out.println(sour.split("##").length);
打印结果是6,后面两个空串被无视了,
可是我想要的结果是8才对,请各位高人指点,如何才能获取正确结果
------解决方案--------------------哦,楼主啊,带个参数就好了:
sour.split("##", -1);
------解决方案--------------------去看一下JDK上对split方法的叙述吧。
有另一个带两个参数的split方法
public String[] split(String regex, int limit)
第二个参数的是限制匹配次数的,设为非正数会无限制的尽可能匹配,如果是0的话则还会将最后的空串去掉。而带一个参数的方法实际上就是调用了第二个参数为0的方法。
所以,你调用sour.split("##", -1).length可以得到9的结果,因为实际上切了8次,分为9段,最后还有一个空串。如果你一定要等于8的结果的话,就再减1吧。
------解决方案--------------------import java.util.List;
import java.util.ArrayList;
public class Test{
public static void main(String []args){
/**
String sour = "1,f,,43,,43,,";
String []arr = sour.split(",") ;
System.out.println(arr.length);
for (int i = 0; i < arr.length; i++){
System.out.println(i+1 + " = " + arr[i]) ;
}
*/
String sour = "1##f####43####43######";
List<String> list = new ArrayList<String>() ;
String tmp = sour;
String content ;
int idx = 0 ;
while(!"".equals(tmp)){
idx = tmp.indexOf("##") ;
list.add(tmp.substring(0 , idx)) ;
System.out.println(list.size() + "、" + list.get(list.size()-1)) ;
tmp = tmp.substring(idx+2) ;
}
System.out.println("===" + list.size() ) ;
}
}
结果:
E:\>java Test
1、1
2、f
3、
4、43
5、
6、43
7、
8、
===8
------解决方案--------------------那是底层调用的代码,在输出结果集的时候进行了判断,把空字符串给过滤掉了。红色字体部分