पहले शब्द को बदलने के लिए खोजें। यदि यह स्ट्रिंग में है, तो घटना के पहले स्ट्रिंग के हिस्से पर, और घटना के बाद स्ट्रिंग के हिस्से पर पुनरावृत्ति करें।
अन्यथा, प्रतिस्थापित किए जाने वाले अगले शब्द के साथ जारी रखें।
एक भोली कार्यान्वयन इस तरह लग सकता है
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);
}
नमूना उपयोग:
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));
आउटपुट:
Once upon a foo, there was a bar and a baz.
एक कम-भोला संस्करण:
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);
}
दुर्भाग्य से, जावा की String
कोई indexOf(String str, int fromIndex, int toIndex)
विधि नहीं है। मैंने indexOf
यहाँ के कार्यान्वयन को छोड़ दिया है क्योंकि मुझे यह निश्चित नहीं है कि यह सही है, लेकिन यह इदोन पर पाया जा सकता है , साथ ही यहाँ पोस्ट किए गए विभिन्न समाधानों के कुछ मोटे समय के साथ।
swap(String s1, String s2, String s3)
कि अदला-बदली की सभी घटनाओंs2
के साथs3
, और इसके विपरीत।