Interface MatchResult

MatchResult là một giao diện trong Java đại diện cho kết quả của một phép so khớp với biểu thức chính quy. Nó cung cấp các phương thức để truy xuất thông tin về các phần khớp, vị trí bắt đầu và kết thúc của các khớp, cũng như các nhóm bắt giữ (capturing groups).

Để sử dụng Interface MatchResult trong gói java.util.regex, bạn cần thêm câu lệnh import vào đầu file Java của mình.

Cú pháp câu lệnh import

import java.util.regex.MatchResult;

Phương thức của Interface MatchResult

Dưới đây là các phương thức chính của giao diện MatchResult:

↳ int start(): Trả về vị trí bắt đầu của lần khớp gần nhất.

↳ int end(): Trả về vị trí kết thúc của lần khớp gần nhất.

↳ String group(): Trả về chuỗi khớp với mẫu chính.

↳ int start(int group): Trả về vị trí bắt đầu của nhóm con cụ thể trong lần khớp gần nhất.

↳ int end(int group): Trả về vị trí kết thúc của nhóm con cụ thể trong lần khớp gần nhất.

↳ String group(int group): Trả về chuỗi khớp với nhóm con cụ thể.

↳ int groupCount(): Trả về số lượng nhóm con trong mẫu chính.

Dưới đây là một ví dụ minh họa về cách sử dụng các phương thức start(), end(), và group() của MatchResult trong Java:

Ví dụ: Example.java

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

public class Example {
    public static void main(String[] args) {
        // Chuỗi đầu vào
        String input = "The quick brown fox.";

        // Biểu thức chính quy để khớp các từ bắt đầu bằng chữ cái thường và có ít nhất một ký tự
        String regex = "\\b[a-z]+\\b";
        
        // Tạo đối tượng Pattern từ biểu thức chính quy
        Pattern pattern = Pattern.compile(regex);
        
        // Tạo đối tượng Matcher từ chuỗi đầu vào
        Matcher matcher = pattern.matcher(input);
        
        // Duyệt qua tất cả các lần khớp
        while (matcher.find()) {
            // Sử dụng các phương thức start(), end(), và group()
            int start = matcher.start();
            int end = matcher.end();
            String matchedGroup = matcher.group();
            
            // In ra kết quả
            System.out.println("Đã tìm thấy kết quả khớp: \"" + matchedGroup + "\"");
            System.out.println("Bắt đầu ở chỉ mục: " + start);
            System.out.println("Kết thúc ở chỉ mục: " + end);
            System.out.println("----------");
        }
    }
}

Kết quả của chương trình là:

Đã tìm thấy kết quả khớp: "quick"
Bắt đầu ở chỉ mục: 4
Kết thúc ở chỉ mục: 9
----------
Đã tìm thấy kết quả khớp: "brown"
Bắt đầu ở chỉ mục: 10
Kết thúc ở chỉ mục: 15
----------
Đã tìm thấy kết quả khớp: "fox"
Bắt đầu ở chỉ mục: 16
Kết thúc ở chỉ mục: 19
----------

Các phương thức start(), end(), và group() của Matcher (một lớp triển khai MatchResult) rất hữu ích để truy xuất chi tiết về từng lần khớp của biểu thức chính quy trong chuỗi văn bản. Chúng cung cấp thông tin về vị trí bắt đầu, vị trí kết thúc, và chuỗi khớp của mỗi lần khớp, giúp bạn dễ dàng xử lý và phân tích chuỗi văn bản.

Dưới đây là một ví dụ minh họa cách sử dụng các phương thức group(), start(int group), end(int group), group(int group), và groupCount() của giao diện MatchResult trong Java.

Ví dụ: Example.java

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

public class Example {
    public static void main(String[] args) {
        // Chuỗi văn bản để tìm kiếm
        String input = "Java 8 is out. Java 11 is more recent.";
        
        // Biểu thức chính quy để tìm các từ "Java" theo sau là số
        String regex = "(Java)\\s(\\d+)";
        
        // Tạo đối tượng Pattern từ biểu thức chính quy
        Pattern pattern = Pattern.compile(regex);
        
        // Tạo đối tượng Matcher để tìm kiếm trong chuỗi đầu vào
        Matcher matcher = pattern.matcher(input);
        
        // Lặp qua các lần khớp tìm thấy
        while (matcher.find()) {
            // Lấy đối tượng MatchResult cho lần khớp hiện tại
            MatchResult result = matcher.toMatchResult();
            
            // In ra kết quả khớp đầy đủ
            System.out.println("Khớp: " + result.group());
            
            // Vị trí bắt đầu và kết thúc của nhóm chính
            System.out.println("Vị trí bắt đầu của nhóm chính: " + result.start());
            System.out.println("Vị trí kết thúc của nhóm chính: " + result.end());
            
            // In ra số lượng nhóm con
            System.out.println("Số lượng nhóm con: " + result.groupCount());
            
            // In ra các nhóm con của lần khớp
            for (int i = 1; i <= result.groupCount(); i++) {
                System.out.println("Nhóm " + i + ": " + result.group(i));
                System.out.println("Vị trí bắt đầu của nhóm " + i + ": " + result.start(i));
                System.out.println("Vị trí kết thúc của nhóm " + i + ": " + result.end(i));
            }
            
            System.out.println("----------");
        }
    }
}

Kết quả của chương trình là:

Đã tìm thấy kết quả khớp: "quick"
Khớp: Java 8
Vị trí bắt đầu của nhóm chính: 0
Vị trí kết thúc của nhóm chính: 6
Số lượng nhóm con: 2
Nhóm 1: Java
Vị trí bắt đầu của nhóm 1: 0
Vị trí kết thúc của nhóm 1: 4
Nhóm 2: 8
Vị trí bắt đầu của nhóm 2: 5
Vị trí kết thúc của nhóm 2: 6
----------
Khớp: Java 11
Vị trí bắt đầu của nhóm chính: 15
Vị trí kết thúc của nhóm chính: 22
Số lượng nhóm con: 2
Nhóm 1: Java
Vị trí bắt đầu của nhóm 1: 15
Vị trí kết thúc của nhóm 1: 19
Nhóm 2: 11
Vị trí bắt đầu của nhóm 2: 20
Vị trí kết thúc của nhóm 2: 22
----------

Sử dụng các phương thức này, bạn có thể dễ dàng trích xuất và phân tích chi tiết các kết quả khớp từ các biểu thức chính quy trong Java.

Câu Nói Truyền Cảm Hứng

“Bắt đầu ở đâu không quan trọng, quan trọng là bạn sẵn sàng bắt đầu.” – W. Clement Stone

Không Gian Tích Cực

“Chúc bạn luôn giữ vững niềm tin và sức mạnh để vượt qua mọi thử thách trong cuộc sống.”