การแสดงออกปกติจะค่อนข้างซับซ้อนในการจัดการเนื่องจากความจริงที่ว่าตัวละครบางตัวจะถูกสงวนไว้: ยกตัวอย่างเช่น"foo.bar".replaceAll(".")
ผลิตสตริงที่ว่างเปล่าเพราะจุดหมายถึง "อะไร" "\\."
ถ้าคุณต้องการที่จะเปลี่ยนเพียงจุดที่ควรจะระบุเป็นพารามิเตอร์
วิธีแก้ปัญหาที่ง่ายกว่าคือการใช้วัตถุ StringBuilder เพื่อค้นหาและแทนที่ข้อความ ใช้เวลาสอง: หนึ่งที่มีข้อความเป็นตัวพิมพ์เล็กในขณะที่สองประกอบด้วยเวอร์ชันดั้งเดิม การค้นหาจะดำเนินการกับเนื้อหาตัวพิมพ์เล็กและดัชนีที่ตรวจพบจะแทนที่ข้อความต้นฉบับด้วย
public class LowerCaseReplace
{
public static String replace(String source, String target, String replacement)
{
StringBuilder sbSource = new StringBuilder(source);
StringBuilder sbSourceLower = new StringBuilder(source.toLowerCase());
String searchString = target.toLowerCase();
int idx = 0;
while((idx = sbSourceLower.indexOf(searchString, idx)) != -1) {
sbSource.replace(idx, idx + searchString.length(), replacement);
sbSourceLower.replace(idx, idx + searchString.length(), replacement);
idx+= replacement.length();
}
sbSourceLower.setLength(0);
sbSourceLower.trimToSize();
sbSourceLower = null;
return sbSource.toString();
}
public static void main(String[] args)
{
System.out.println(replace("xXXxyyyXxxuuuuoooo", "xx", "**"));
System.out.println(replace("FOoBaR", "bar", "*"));
}
}