本帖最后由 王宝康 于 2012-8-18 22:12 编辑
今天逛论坛看到一个同学问的关于String类的以正则表达式切割字符串的问题,详细看了下API中关于split(String regex,int limit)的介绍,感觉讲的很麻烦,现在把自己的理解写一下和大家分享一下。
字符串 "boo:and:foo" 使用这些参数可生成以下结果: Regex | Limit | 结果[/td] | : | 2 | { "boo", "and:foo" } | : | 5 | { "boo", "and", "foo" } | : | -2 | { "boo", "and", "foo" } | o | 5 | { "b", "", ":and:f", "", "" } | o | -2 | { "b", "", ":and:f", "", "" } | o | 0 | { "b", "", ":and:f" } | 其中方法中的参数分别为String regex,int limit,regex为要进行切割的标识,limit是要把字符串用regex切割成几个字符串,limit为负数时,会将字符串切割成尽可能多的几个字符串,并且会保留最后出现的空字符串,当limit为0的时候,也会将字符串切割成尽可能多的几个字符串,但是不会保留最后出现的空字符串。
public String[] split(String regex)该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数split方法。因此,所得数组中不包括结尾空字符串。
"boo:and:foo"
regex limit
o -1
split方法其实就是循环对字符串及其子串进行切割的,以下遵循这个模式:应用正则表达式后的第一个字符串--正则表达式--应用正则表达式后的子串,第一次:“b”---o---“o:and:foo”,第二次:“”---o---“:and:foo”,第三次:“:and:f”--o--“o”,第四次“”--o--“”
所以切割后的字符串数组为["b","o:and:foo","",":and:foo",":and:f","",""],
当limit为0时,就会去掉结尾处的空格,切割后的字符串就为{ "b", "", ":and:f" }
所有在limit的值为非正时候要注意切割后字符串末尾的空字符串的情况。
|
|