拆分字符串是Java编程中常见的操作。相信很多同学都知道String类中的split方法可以拆分一个字符串,但是日常使用仅限于str。.split("-"),其中“-”是分隔符。其实split方法非常强大,你可以用它来更优雅的拆分字符串。使用split方法的声明是publicString[]split(Stringregex),其中regex指的是正则表达式分隔符。我们通常使用单个字符作为分隔符。其实可以看成是一种特殊的正则表达式。这种表达式只匹配自身,比如"-"只匹配"-",例子如下:Stringstring="86-15003455666";String[]parts=string.split("-");Stringpart1=parts[0];//86Stringpart2=parts[1];//15003455666split方法的另一种声明是:publicString[]split(Stringregex,intlimit)regex指的是正则表达式分隔符,limit指定拆分的次数。举个例子来理解Stringstring="004-556-42";String[]parts=string.split("-",2);//限制拆分为两个Stringpart1=parts[0];//004Stringpart2=parts[1];//556-42在某些场景下,我们可能希望保留结果中的分隔符,也可以设置分隔符与拆分后左边的结果相连,Stringstring="86-15003455666";String[]parts=string.split("(?<=-)");Stringpart1=parts[0];//86-Stringpart2=parts[1];//15003455666设置分割后的分隔符和右边结果连起来了,Stringstring="86-15003455666";String[]parts=string.split("(?=-)");Stringpart1=parts[0];//86Stringpart2=parts[1];//-15003455666机智的你可能发现了,其实切分方法的精妙之处在于正则表达式regex的设置,而正则表达式还是需要努力学习!在实际工作场景中使用正则表达式,我们往往需要在拆分前检查待拆分字符串的格式。只有当它符合我们的要求时,我们才拆分它。使用Pattern类加上Matcher类可以一次性完成字符串的格式识别和拆分:publicclassSplitExample{//\d代表一个数字,+代表出现一次或多次。所以(\\d+)-(\\d+)匹配两个由“-”连接的数字串//Pattern对象是一个正则表达式的编译表示d+)");publicstaticvoidcheckString(Strings){//Matcher对象解释并匹配输入字符串Matcherm=twopart.matcher(s);if(m.matches()){//m.group(1)和m.group(2)存储分割后的子串System.out.println(s+"matches;firstpartis"+m.group(1)+",secondpartis"+m.group(2)+".");}else{System.out.println(s+"doesnotmatch.");}}publicstaticvoidmain(String[]args){checkString("123-4567");//匹配checkString("s-tar");//字母序列,不匹配checkString("123-");//数字"-"右边的字符串为空,不匹配checkString("-4567");//"-"左边的数字字符串为空,不匹配checkString("123-4567-890");//有两个"-",不匹配}}以上程序运行结果为:
