java中split方法的特殊用法

来源:互联网 发布:淘宝花卉指南 编辑:程序博客网 时间:2024/05/07 20:01
在java.lang.String类中有split()方法,返回是一个数组,api文档中的描述如下:
public String[] split(String regex)
根据给定正则表达式的匹配拆分此字符串。


1、通常用法如下:
    String t = "abcdxefg";
    String[] arr = t.split("x");
最后得到的数组是:"abcd", "efg"。


2、由api文档中的描述可以看出:参数regex是正则表达式。说到正则表达式,就要考虑到元字符的特殊情况。正则表达式中的元字符有(共12个):$ ( ) * + . ? [ \ ^ { | 
如果直接用这些元字符来拆分字符串,会有什么结果呢?举例如下:
    String t = "abcd$efg";
    String[] arr = t.split("$");
如果将举例中的"$"依次替换为其他元字符,结果有5种情况:
①\ :编译错误。
②( ) * + ? [ { :运行时会报java.util.regex.PatternSyntaxException错误。
③. :得到的数组为空,数组长度为0。
④$ ^ :字符串没有被拆分,得到的数组依然是字符串本身,数组长度为1。
⑤| :得到字符串中每个字符组成的数组,数组长度为字符串长度+1。
对于②③④⑤的情况,可以通过将split参数中每个元字符前添加"\\"来解决。比如将"$"替换成"\\$"。
而对于①的情况,由于"\"本身对于java来说也是用于转义的特殊字符,所以处理方式稍有不同。需要同时将两个字符串进行修改:
    String t = "abcd\\efg";
    String[] arr = t.split("\\\\");


3、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,例如:
    String t = "abcdxefgyhijkxlmn";
    String[] arr = t.split("x|y");
最后得到的数组是:"abcd", "efg", "hijk", "lmn"。