Không thanh lịch có lẽ như các phương pháp khác nhưng nó khá vững chắc và dễ làm theo, đặc biệt. cho những người mới hơn với Java. Một điều khiến tôi hiểu về lớp String là: Nó đã xuất hiện từ rất lâu và trong khi nó hỗ trợ thay thế toàn cầu bằng regrec và thay thế toàn cầu bằng String (thông qua CharSequences), cuối cùng không có tham số boolean đơn giản : 'isCaseInsensitive'. Thực sự, bạn đã nghĩ rằng chỉ bằng cách thêm một công tắc nhỏ đó, tất cả những rắc rối mà sự vắng mặt của nó gây ra cho người mới bắt đầu đặc biệt có thể tránh được. Bây giờ trên JDK 7, String vẫn không hỗ trợ thêm một chút này!
Dù sao, tôi sẽ ngừng nắm bắt. Đối với mọi người đặc biệt mới hơn với Java, đây là deus ex machina cắt và dán của bạn . Như tôi đã nói, không thanh lịch và sẽ không giành cho bạn bất kỳ giải thưởng mã hóa bóng bẩy nào, nhưng nó hoạt động và đáng tin cậy. Bất kỳ ý kiến, hãy đóng góp. (Vâng, tôi biết, StringBuffer có lẽ là một lựa chọn tốt hơn để quản lý hai dòng đột biến chuỗi ký tự, nhưng nó đủ dễ để trao đổi các kỹ thuật.)
public String replaceAll(String findtxt, String replacetxt, String str,
boolean isCaseInsensitive) {
if (str == null) {
return null;
}
if (findtxt == null || findtxt.length() == 0) {
return str;
}
if (findtxt.length() > str.length()) {
return str;
}
int counter = 0;
String thesubstr = "";
while ((counter < str.length())
&& (str.substring(counter).length() >= findtxt.length())) {
thesubstr = str.substring(counter, counter + findtxt.length());
if (isCaseInsensitive) {
if (thesubstr.equalsIgnoreCase(findtxt)) {
str = str.substring(0, counter) + replacetxt
+ str.substring(counter + findtxt.length());
// Failing to increment counter by replacetxt.length() leaves you open
// to an infinite-replacement loop scenario: Go to replace "a" with "aa" but
// increment counter by only 1 and you'll be replacing 'a's forever.
counter += replacetxt.length();
} else {
counter++; // No match so move on to the next character from
// which to check for a findtxt string match.
}
} else {
if (thesubstr.equals(findtxt)) {
str = str.substring(0, counter) + replacetxt
+ str.substring(counter + findtxt.length());
counter += replacetxt.length();
} else {
counter++;
}
}
}
return str;
}