问个简单又纠结的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
------解决方案--------------------那是底层调用的代码,在输出结果集的时候进行了判断,把空字符串给过滤掉了。红色字体部分