String类实现replace() 方法主要是用先匹配子串内容是否在目标串中出现,若出现将其修改为自定义的字符串。
replace(目标串,子串,新子串)。可以再细分为若新子串和子串的长度相等和不相等两种。
1.新子串和子串的长度相等
代码:
public static String replaceChar(String s,String t,String r){ String string = null; try { char s1 [] = s.toCharArray(); char t1 [] = t.toCharArray(); char r1 [] = r.toCharArray(); int i = 0,j = 0; while(i<s1.length && j<t1.length){ if(s1[i] == t1[j]){ i++; j++; if(j==t1.length){ int a = 0; for (int k = i-t1.length; k <i ; k++) { s1 [k] = r1[a]; a++; } j=0; } }else{ i = i-j+1; j = 0; } } string = new String(s1); }catch (Exception e){ e.printStackTrace(); } return string; }
2.新子串和子串的长度不相等(对1的扩展)
代码:
public static String Replacechar(String s, String t, String r) { String string = ""; int time = 0; //匹配次数计数器 try { char s1[] = s.toCharArray(); char t1[] = t.toCharArray(); int i = 0, j = 0; while (i < s1.length && j < t1.length) { if (s1[i] == t1[j]) { i++; j++; if (j == t1.length) { time++; string += r; j = 0; } } else { i = i - j + 1; j = 0; string += String.valueOf(s1[i - 1]); } } } catch (Exception e) { e.printStackTrace(); }if(time==0){ System.out.println("子串没有出现在目标串中,直接返回目标串!!!"); return s; }else { return string; } }
相比之下,代码一时间复杂度是大于代码二的。