Tìm kiếm từ đầu tiên được thay thế. Nếu nó nằm trong chuỗi, hãy lặp lại phần của chuỗi trước khi xảy ra và trên phần của chuỗi sau khi xảy ra.
Nếu không, tiếp tục với từ tiếp theo sẽ được thay thế.
Một triển khai ngây thơ có thể trông như thế này
public static String replaceAll(String input, String[] search, String[] replace) {
return replaceAll(input, search, replace, 0);
}
private static String replaceAll(String input, String[] search, String[] replace, int i) {
if (i == search.length) {
return input;
}
int j = input.indexOf(search[i]);
if (j == -1) {
return replaceAll(input, search, replace, i + 1);
}
return replaceAll(input.substring(0, j), search, replace, i + 1) +
replace[i] +
replaceAll(input.substring(j + search[i].length()), search, replace, i);
}
Sử dụng mẫu:
String input = "Once upon a baz, there was a foo and a bar.";
String[] search = new String[] { "foo", "bar", "baz" };
String[] replace = new String[] { "bar", "baz", "foo" };
System.out.println(replaceAll(input, search, replace));
Đầu ra:
Once upon a foo, there was a bar and a baz.
Một phiên bản ít ngây thơ hơn:
public static String replaceAll(String input, String[] search, String[] replace) {
StringBuilder sb = new StringBuilder();
replaceAll(sb, input, 0, input.length(), search, replace, 0);
return sb.toString();
}
private static void replaceAll(StringBuilder sb, String input, int start, int end, String[] search, String[] replace, int i) {
while (i < search.length && start < end) {
int j = indexOf(input, search[i], start, end);
if (j == -1) {
i++;
} else {
replaceAll(sb, input, start, j, search, replace, i + 1);
sb.append(replace[i]);
start = j + search[i].length();
}
}
sb.append(input, start, end);
}
Thật không may, Java String
không có indexOf(String str, int fromIndex, int toIndex)
phương pháp. Tôi đã bỏ qua việc thực hiện indexOf
ở đây vì tôi không chắc nó đúng, nhưng nó có thể được tìm thấy trên ideone , cùng với một số thời gian sơ bộ của các giải pháp khác nhau được đăng ở đây.
swap(String s1, String s2, String s3)
hoán đổi tất cả các lần xuất hiệns2
vớis3
và ngược lại.