Jdk的api文档中,描述split方法很详细,但是不仔细研究一下,隐藏的信息是无法显现出来的。
一个实例,分解字符串"boo:and:foo"
在这个例子中,调用split(String regex)方法,其实等价调用它的过载方法split(String regex, int limit),limint=0,打印结果:
分析一下,得到结果的原因,刚开始我以为结果是["b",":and:f"],但是事与愿违。在分析结果之前需要理解这样一句话:
"boo:and:foo"
第一次用o分隔取得"b" 和 "o:and:foo"
第二次用o分隔取得"" 和 ":and:foo"
第三次用o分隔取得":and:f"和"o"
第四次用o分隔取得"" 和 "" 因为"o"这个分隔了之后可以获取到左右两个空字符串,即忽略掉后面的空字符串
那么,结果是"b" "" ":and:f"
修改上面例子,代码如下:
运行结果,是这样的:
结合api,分析结果,靠谱一点,一句话:
ok,这次没有去掉末尾的两个空字符串。再看一个实例,将n改为正数1,如下:
结果是“boo:and:foo”,yes,没有分解,why???
因为只执行n-1次 所以1-1 =0 一次都不分隔得到原始字符串。改为其它正数,结果在jdk的api上已经给出:
补充一句:limit=9,在此字符串中与limit=5时是一样的效果。
转载一篇:
Java中Split函数的用法技巧
来源:http://www.cnblogs.com/liubiqu/archive/2008/08/14/1267867.html
在java.lang包中也有String.split()方法,与.net的类似,都是返回是一个字符型数组,但使用过程中还有一些小技巧。如执行:
出来的结果是:
奇怪吧,不过注意看一下API说明还是知道原因的。
所以正常的写法是这样的:
1、如果用“.”作为分隔的话,必须是如下写法:String.split("//."),这样才能正确的分隔开,不能用String.split(".");
2、如果用“|”作为分隔的话,必须是如下写法:String.split("//|"),这样才能正确的分隔开,不能用String.split("|");
“.”和“|”都是转义字符,必须得加"//";
3、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如:“a=1 and b =2 or c=3”,把三个都分隔出来,可以用String.split("and|or");