Java: Các phương thức của lớp PatternSyntaxException
PatternSyntaxException là một ngoại lệ unchecked dùng để cho ta biết lỗi cú pháp trong một mẫu biểu thức chính quy. Lớp PatternSyntaxException cung cấp các phương thức sau để giúp bạn xác định xem lỗi như thế nào:
public String getDescription()
: Truy xuất mô tả của lỗi.public int getIndex()
: Truy xuất chỉ mục của lỗi.public String getPattern()
: Truy xuất biểu thức chính quy bị lỗi.public String getMessage()
: Trả về một chuỗi nhiều dòng chứa mô tả về lỗi cú pháp và chỉ mục của nó, mẫu biểu thức chính quy bị lỗi và chỉ báo trực quan về chỉ mục lỗi trong mẫu.
Ví dụ sau cập nhật test harness của ta để kiểm tra các biểu thức chính quy không đúng định dạng:
package solutions; import java.util.Scanner; import java.util.regex.Pattern; import java.util.regex.Matcher; import java.util.regex.PatternSyntaxException; public class RegexTestHarness2 { public static void main(String[] args) { Pattern pattern = null; Matcher matcher = null; Scanner scanner = new Scanner(System.in); while (true) { try { System.out.print("Mời nhập biểu thức chính quy: "); pattern = Pattern.compile(scanner.nextLine()); System.out.print("Mời nhập chuỗi đầu vào: "); matcher = pattern.matcher(scanner.nextLine()); } catch (PatternSyntaxException pse) { System.out.printf("Có vấn đề với" + " biểu thức chính quy!%n"); System.out.printf("Mẫu là: %s%n", pse.getPattern()); System.out.printf("Mô tả là: %s%n", pse.getDescription()); System.out.printf("Thông báo là: %s%n", pse.getMessage()); System.out.printf("Chỉ mục là: %s%n", pse.getIndex()); System.exit(0); } boolean found = false; while (matcher.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", matcher.group(), matcher.start(), matcher.end()); found = true; } if (!found) { System.out.printf("Không tìm thấy sự tương thích.%n"); } } } }
Kết quả của ví dụ trên sẽ như sau khi ta nhập biểu thức chính quy là ?i)
:
Mời nhập biểu thức chính quy: ?i) Có vấn đề với biểu thức chính quy! Mẫu là: ?i) Mô tả là: Dangling meta character '?' Thông báo là: Dangling meta character '?' near index 0 ?i) ^ Chỉ mục là: 0
Từ kết quả ta thấy rằng lỗi được thông báo chi tiết là Dangling meta character '?' near index 0
. Ở đây ta thấy là đã thiếu dấu ( trong biểu thức chính quy.