Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Phương thức Matcher.requireEnd() trong Java với ví dụ


Lớp java.util.regex.Matcher đại diện cho một engine thực hiện các phép toán khớp khác nhau. Không có constructor cho lớp này, bạn có thể tạo/nhận đối tượng của lớp này bằng phương thức matcher() của lớp java.util.regex.Pattern.

Trong trường hợp có khớp, phương thức requireEnd() của lớp này kiểm tra xem có khả năng kết quả khớp trở thành false nếu có thêm đầu vào hay không. Nếu có, trả về true, ngược lại false.

Ví dụ, nếu bạn cố gắng khớp từ cuối chuỗi là "you" bằng regex "you$" và dòng đầu vào đầu tiên là "hello how are you", bạn có thể có khớp. Nhưng nếu nhận thêm câu, từ cuối dòng mới có thể không phải "you", làm kết quả khớp thành false. Trong trường hợp này, requireEnd() trả về true.

Tương tự, nếu bạn khớp ký tự cụ thể "#" và dòng đầu là "Hello # how are you", bạn sẽ có khớp. Thêm dữ liệu có thể thay đổi nội dung matcher nhưng không làm kết quả từ true thành false. Lúc này requireEnd() trả về false.

Ví dụ 1: requireEnd() true với $ (cuối chuỗi)

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

public class RequiredEndExample {
    public static void main(String args[]) {
        String regex = "you$";
        Scanner sc = new Scanner(System.in);
        System.out.println("Nhập văn bản đầu vào: ");
        String input = sc.nextLine();
        
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        
        if (matcher.find()) {
            System.out.println("Tìm thấy khớp");
        }
        
        boolean result = matcher.requireEnd();
        if (result) {
            System.out.println("Thêm đầu vào có thể làm kết quả khớp thành false");
        } else {
            System.out.println("Kết quả khớp sẽ là true, bất kể thêm dữ liệu");
        }
    }
}

Kết quả

Nhập văn bản đầu vào: Hello how are you
Tìm thấy khớp
Thêm đầu vào có thể làm kết quả khớp thành false

Ví dụ 2: requireEnd() false với ký tự trung gian #

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

public class RequiredEndExample {
    public static void main(String args[]) {
        String regex = "[#]";
        Scanner sc = new Scanner(System.in);
        System.out.println("Nhập văn bản đầu vào: ");
        String input = sc.nextLine();
        
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        
        if (matcher.find()) {
            System.out.println("Tìm thấy khớp");
        }
        
        boolean result = matcher.requireEnd();
        if (result) {
            System.out.println("Thêm đầu vào có thể làm kết quả khớp thành false");
        } else {
            System.out.println("Kết quả khớp sẽ là true, bất kể thêm dữ liệu");
        }
    }
}

Kết quả

Nhập văn bản đầu vào: Hello# how# are you
Tìm thấy khớp
Kết quả khớp sẽ là true, bất kể thêm dữ liệu

Khác biệt với hitEnd(): hitEnd() kiểm tra có chạm cuối input không; requireEnd() kiểm tra có cần cuối input để duy trì khớp không (anchor $, \\z).