Java: Lớp Matcher
Giải phóng thời gian, khai phóng năng lực
Đối tượng Matcher được tạo ra từ một mẫu bằng cách gọi phương thức match() trên đối tượng Pattern.
Đối tượng Matcher là công cụ thực hiện các hoạt động so khớp trên một chuỗi ký tự bằng cách diễn giải một Pattern.
Cú pháp của lớp Matcher như sau:
public final class Matcher extends Object implements MatchResult
Sau khi tạo, một đối tượng Matcher có thể được sử dụng để thực hiện ba loại hoạt động so khớp khác nhau:
- Phương thức match() được sử dụng để so khớp toàn bộ chuỗi đầu vào với mẫu.
- Phương thức lookAt() được sử dụng để so khớp trình tự đầu vào, ngay từ đầu, với mẫu.
- Phương thức find() được sử dụng để quét chuỗi đầu vào để tìm chuỗi con tiếp theo phù hợp với mẫu
Lớp Matcher bao gồm các phương thức chỉ mục cung cấp các giá trị chỉ mục hữu ích có thể được sử dụng để chỉ ra chính xác vị trí tìm thấy kết hợp trong chuỗi đầu vào như sau:
- public int start()
- public int start(int group)
- public int end()
- public int end(int group)
Sau đây là một số phương thức quan trọng của lớp Matcher:
- Matcher appendReplacement(StringBuffer sb, String replacement)
- StringBuffer appendTail(StringBuffer sb)
- boolean find()
- boolean find(int start)
- String group()
- String group(int group)
- String group(String name)
- int groupCount()
Trạng thái tường minh của trình so khớp gồm:
- Chỉ số bắt đầu và kết thúc của lần tương thích gần đây nhất.
- Chỉ số bắt đầu và chỉ số kết thúc của dãy đầu vào được thu thập bởi nhóm thu thập trong mẫu.
- Tính tổng các dãy con.
Trạng thái ngầm định của trình so khớp gồm:
- Chuỗi ký tự đầu vào.
- Vị trí nối thêm, ban đầu bằng không. Nó được cập nhật bởi phương thức appendReplacement().
Phương thức reset()
giúp trình so khớp được đặt lại một cách tường minh.
Nếu muốn có một chuỗi đầu vào mới, ta có thể gọi phương thức reset(CharSequence)
.
Thao tác đặt lại trên bộ so khớp sẽ loại bỏ thông tin trạng thái tường minh của nó và đặt vị trí nối thêm bằng 0.
Các phiên bản của lớp Matcher không an toàn để sử dụng cho nhiều luồng (thread) đồng thời.
Ví dụ sau đây nói về việc sử dụng Pattern và Matcher để tạo và đánh giá biểu thức chính quy:
package solutions; import java.util.Scanner; import java.util.regex.Pattern; import java.util.regex.Matcher; public class RegexTest { public static void main(String[] args) { String flag; Scanner input=new Scanner(System.in); while (true) { System.out.print("\nMời nhập biểu thức: "); Pattern pattern1 = Pattern.compile(input.nextLine()); System.out.print("\nMời nhập chuỗi đầu vào: "); Matcher matcher1 = pattern1.matcher(input.nextLine()); boolean found = false; while (matcher1.find()) { System.out.printf("Tìm thấy văn bản" + " \"%s\" bắt đầu tại " + "chỉ số %d và kết thúc tại chỉ số %d.%n", matcher1.group(), matcher1.start(), matcher1.end()); found = true; } if (!found) { System.out.printf("Không tìm thấy sự tương thích.%n"); } // đoạn code thoát khỏi ứng dụng System.out.print("Nhấn phím x để thoát hoặc y để tiếp tục: "); flag = input.nextLine(); if (flag.equals("x")) System.exit(0); else continue; } } }
Giải thích ví dụ:
- Một vòng lặp while đã được tạo bên trong lớp RegexTest.
- Trong vòng lặp, một đối tượng Pattern được tạo và khởi tạo với biểu thức chính quy được chỉ định trong thời gian chạy bằng phương thức
input.nextLine()
. - Tương tự, đối tượng Matcher đã được tạo và khởi tạo với chuỗi đầu vào được chỉ định trong thời gian chạy.
- Tiếp theo, một vòng lặp while khác đã được tạo để lặp lại cho đến khi phương thức
find()
trả về false.
Giải phóng thời gian, khai phóng năng lực