Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

แทนที่ข้อความที่จับคู่ทั้งหมดใน Java Regex

หลังคอมไพล์ 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 อ้างอิงกลุ่มจับคู่ได้