Tìm kiếm và thay thế văn bản

Java:
Tìm kiếm và thay thế văn bản

Cách thực hiện:

Tìm kiếm và thay thế trong Java rất dễ dàng nhờ vào lớp String và phương thức replace() của nó. Dưới đây là cách bạn làm:

public class ReplaceDemo {
    public static void main(String[] args) {
        String originalText = "The quick brown fox jumps over the lazy dog";
        String modifiedText = originalText.replace("lazy", "energetic");
        
        System.out.println("Trước: " + originalText);
        System.out.println("Sau: " + modifiedText);
    }
}

Kết quả:

Trước: The quick brown fox jumps over the lazy dog
Sau: The quick brown fox jumps over the energetic dog

Bây giờ, đối với các mẫu hoặc việc thay thế phức tạp hơn, PatternMatcher được sử dụng:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class RegexReplaceDemo {
    public static void main(String[] args) {
        String originalText = "There are 31,536,000 seconds in 365 days.";
        Pattern pattern = Pattern.compile("\\d+");
        Matcher matcher = pattern.matcher(originalText);
        String modifiedText = matcher.replaceAll("#");
        
        System.out.println("Trước: " + originalText);
        System.out.println("Sau: " + modifiedText);        
    }
}

Kết quả:

Trước: There are 31,536,000 seconds in 365 days.
Sau: There are # seconds in # days.

Sâu hơn:

Phương thức replace() có nguồn gốc từ những ngày đầu của Java. Nó là một phần của lớp String bất biến, nghĩa là mỗi lần bạn sử dụng nó, bạn đang tạo một chuỗi mới. Rất thân thiện với môi trường, không lãng phí đồ cũ.

Nhưng vấn đề với PatternMatcher là gì, bạn hỏi? Các lớp này là một phần của API biểu thức chính quy (regex) của Java, được giới thiệu trong Java 1.4. Chúng tăng cường khả năng tìm kiếm và thay thế, cho phép bạn phát hiện các mẫu phức tạp và chỉnh sửa văn bản một cách linh hoạt. Đó giống như việc sử dụng một dao mổ thay vì một búa lớn.

Thêm vào đó, có replaceAll()replaceFirst(), hai phương thức của lớp Matcher giúp bạn điều chỉnh việc biến đổi văn bản một cách tinh tế hơn, thay thế tất cả các lần xuất hiện hoặc chỉ lần xuất hiện đầu tiên.

Một lựa chọn khác là sử dụng lớp StringBuffer hoặc StringBuilder khi bạn đang xử lý hàng tấn sửa đổi vì khác với String, các bộ đệm này có thể thay đổi.

Xem thêm:

Để thực hành nhiều hơn, hãy kiểm tra RegexOne (https://regexone.com), đó là một nguồn lực tuyệt vời để nâng cấp kỹ năng regex của bạn.