Computer >> Máy Tính >  >> Lập trình >> Java

Sự khác biệt giữa match () và find () trong Java Regex là gì?

java.util.regex.Matcher lớp đại diện cho một công cụ thực hiện các hoạt động so khớp khác nhau. Không có hàm tạo nào cho lớp này, bạn có thể tạo / lấy một đối tượng của lớp này bằng cách sử dụng phương thức match () của lớp java.util.regex.Pattern.

Cả đối sánh () find () các phương thức của lớp Matcher cố gắng tìm đối sánh theo biểu thức chính quy trong chuỗi đầu vào. Trong trường hợp khớp, cả hai phương thức đều trả về true và nếu không tìm thấy khớp thì cả hai phương thức đều trả về false.

Sự khác biệt chính là phương thức match () cố gắng khớp với toàn bộ vùng của đầu vào đã cho, tức là nếu bạn đang cố gắng tìm kiếm các chữ số trong một dòng, phương thức này chỉ trả về true nếu đầu vào có các chữ số trong tất cả các dòng trong vùng.

Ví dụ1

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
   public static void main(String[] args) {
      String regex = "(.*)(\\d+)(.*)";
      String input = "This is a sample Text, 1234, with numbers in between. "
         + "\n This is the second line in the text "
         + "\n This is third line in the text";
      //Creating a pattern object
      Pattern pattern = Pattern.compile(regex);
      //Creating a Matcher object
      Matcher matcher = pattern.matcher(input);
      if(matcher.matches()) {
         System.out.println("Match found");
      } else {
         System.out.println("Match not found");
      }
   }
}

Đầu ra

Match not found

Trong khi đó, phương thức find () cố gắng tìm chuỗi con tiếp theo phù hợp với mẫu, tức là nếu ít nhất một kết quả khớp được tìm thấy trong vùng thì phương thức này trả về true.

Nếu bạn xem xét ví dụ sau, chúng tôi đang cố gắng đối sánh một dòng cụ thể với các chữ số ở giữa.

Ví dụ2

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
   public static void main(String[] args) {
      String regex = "(.*)(\\d+)(.*)";
      String input = "This is a sample Text, 1234, with numbers in between. "
         + "\n This is the second line in the text "
         + "\n This is third line in the text";
      //Creating a pattern object
      Pattern pattern = Pattern.compile(regex);
      //Creating a Matcher object
      Matcher matcher = pattern.matcher(input);
      //System.out.println("Current range: "+input.substring(regStart, regEnd));
      if(matcher.find()) {
         System.out.println("Match found");
      } else {
         System.out.println("Match not found");
      }
   }
}

Đầu ra

Match found