java语言程序设计 **10.25 第十章练习题 string类中split函数实现

**10.25(新的字符串split方法)String类中的split方法会返回一个字符串数组,该数组是由分隔符分开的字串构成的。但是,这个分隔符是不返回的。实现下面的新方法,方法返回字符串数组,这个数组由匹配字符分隔开的字串构成,字串也包括匹配字符。

public static String[] split(String s,String regex)

例如,split("ab#12#453","#")会返回ab、#、12、#和453构成的String数组,而split("a?b?gf#e","[?#]")会返回a、?、b、?、gf、#和e构成的字符串数组。

//package example4;
import java.io.*;
import java.util.*;
import java.util.regex.*;
public class ex5 {

    public static String[] split(String s,String regex) {
        ArrayList<String> matchList = new ArrayList<String>();
        Pattern pat = Pattern.compile(regex);  
        Matcher mat = pat.matcher(s);
        int index = 0;
        while(mat.find()) {
                String match = s.subSequence(index, mat.start()).toString();
                matchList.add(match);
                String match2 = s.subSequence(mat.start(),mat.end()).toString();
                matchList.add(match2);
                index = mat.end();
        }
        String match = s.subSequence(index,s.length()).toString();
        matchList.add(match);
        
        int resultSize = matchList.size();
        while (resultSize > 0 && matchList.get(resultSize-1).equals(""))
            resultSize--;
        String[] result = new String[resultSize];
        return matchList.subList(0, resultSize).toArray(result);
        }
    public static void main(String[] args) {
        String[] ans=split("ab#123#453","#");
        System.out.println("模式串为“ab#123#453”,匹配串为“#”的匹配结果string数组为:");
        for(int i=0;i<ans.length;i++) {
            System.out.println(ans[i]);
        }
        String[] ans2=split("a?b?gf#e","[?#]");
        System.out.println("模式串为“a?b?gf#e”,匹配串为“[?#]”的匹配结果string数组为:");
        for(int i=0;i<ans2.length;i++) {
            System.out.println(ans2[i]);
        }
    }
    
}

 

posted @ 2019-12-06 21:45  观稳769  阅读(745)  评论(0编辑  收藏  举报