หลังคอมไพล์ regex และสร้าง Matcher แล้ว สามารถแทนที่ส่วนที่จับคู่ทั้งหมดด้วยสตริงอื่นได้ โดยใช้เมธอด replaceAll() ของคลาส Matcher
ตัวอย่าง 1: แทนที่ทับ (tab) ด้วยช่องว่าง
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ReplaceAll {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter input text: ");
String input = sc.nextLine();
String regex = "\\t+";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println("No.of matches: " + count);
String result = matcher.replaceAll(" ");
System.out.println("Result: " + result);
}
}
ผลลัพธ์
Enter input text: sample text with tab spaces
No.of matches: 4
Result: sample text with tab spaces
ตัวอย่าง 2: แทนที่เฉพาะครั้งแรกด้วย replaceFirst()
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ReplaceAll {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter input text: ");
String input = sc.nextLine();
String regex = "\\d";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println("No.of matches: " + count);
String result = matcher.replaceFirst("#");
System.out.println("Result: " + result);
}
}
ผลลัพธ์
Enter input text: test data 1 2 3
No.of matches: 3
Result: test data # 2 3
สรุป
matcher.replaceAll(replacement)- แทนที่ ทุก ส่วนที่จับคู่matcher.replaceFirst(replacement)- แทนที่ ครั้งแรก ที่จับคู่- ทั้งสองคืนค่าสตริงใหม่ ไม่เปลี่ยนสตริงเดิม (String immutable)
- ใน replacement สามารถใช้
$1,$2อ้างอิงกลุ่มจับคู่ได้