Java: Lớp Matcher

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
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("\nMi nhp biu thc: ");
      Pattern pattern1 =
        Pattern.compile(input.nextLine());
      System.out.print("\nMi nhp chui đu vào: ");
      Matcher matcher1 =
        pattern1.matcher(input.nextLine());
      boolean found = false;
      while (matcher1.find()) {
        System.out.printf("Tìm thy văn bn"
            + " \"%s\" bt đu ti "
            + "ch s %d và kết thúc ti ch s %d.%n",
          matcher1.group(), matcher1.start(), matcher1.end());
        found = true;
      }

      if (!found) {
        System.out.printf("Không tìm thy s tương thích.%n");
      }
      // đon code thoát khi ng dng
      System.out.print("Nhn phím x đ thoát hoc y đ tiếp tc: ");
      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.
» Tiếp: Bài tập phần Biểu thức chính quy
« Trước: Lớp Pattern
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!