A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 王宝康 于 2012-8-18 22:12 编辑

       今天逛论坛看到一个同学问的关于String类的以正则表达式切割字符串的问题,详细看了下API中关于split(String regex,int limit)的介绍,感觉讲的很麻烦,现在把自己的理解写一下和大家分享一下。
       字符串 "boo:and:foo" 使用这些参数可生成以下结果:
  RegexLimit结果[/td]
:2{ "boo", "and:foo" }
:5{ "boo", "and", "foo" }
:-2{ "boo", "and", "foo" }
o5{ "b", "", ":and:f", "", "" }
o-2{ "b", "", ":and:f", "", "" }
o0{ "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的值为非正时候要注意切割后字符串末尾的空字符串的情况。





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马