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]); } } }