2012-04-22 32 views
6

Tôi đang đề cập đến khai thác thử nghiệm được liệt kê ở đây http://docs.oracle.com/javase/tutorial/essential/regex/test_harness.htmltương đương Canonical trong Pattern

Sự thay đổi duy nhất tôi thực hiện cho các lớp là mô hình được tạo ra như sau:

Pattern pattern = 
     Pattern.compile(console.readLine("%nEnter your regex(Pattern.CANON_EQ set): "),Pattern.CANON_EQ); 

Khi hướng dẫn tại http://docs.oracle.com/javase/tutorial/essential/regex/pattern.html gợi ý tôi đặt vào mẫu hoặc regex là a\u030A và chuỗi để khớp với số \u00E5 nhưng nó kết thúc trên Không tìm thấy kết quả phù hợp. Tôi thấy cả hai dây là một chiếc hộp nhỏ 'a' với chiếc nhẫn trên đầu.

Tôi chưa hiểu đúng trường hợp sử dụng chưa?

Trả lời

7

Hành vi bạn thấy không liên quan gì đến cờ Pattern.CANON_EQ.

Đọc đầu vào từ bảng điều khiển không giống như chữ cái chuỗi Java. Khi người dùng (có lẽ là bạn, thử nghiệm cờ này) loại \u00E5 vào bảng điều khiển, chuỗi kết quả được đọc bởi console.readLine tương đương với "\\u00E5", không phải là "å". Xem cho chính mình: http://ideone.com/lF7D1

Đối với Pattern.CANON_EQ, nó cư xử chính xác như mô tả:

Pattern withCE = Pattern.compile("^a\u030A$",Pattern.CANON_EQ); 
Pattern withoutCE = Pattern.compile("^a\u030A$"); 
String input = "\u00E5"; 

System.out.println("Matches with canon eq: " 
    + withCE.matcher(input).matches()); // true 
System.out.println("Matches without canon eq: " 
    + withoutCE.matcher(input).matches()); // false 

http://ideone.com/nEV1V

+2

Có và không. Một chuỗi là một chuỗi là một chuỗi, nhưng bạn chính xác theo nghĩa là một chuỗi được đọc từ bảng điều khiển không cần phải thoát nữa, trong khi chuỗi ký tự không cần phải thoát. –

+0

@AdamMihalcin chỉnh sửa tốt. Tôi đã đưa ra câu trả lời của tôi nhiều hơn một chút, với một bản demo để hy vọng minh họa sự khác biệt trong thoát. –

+0

Cảm ơn bạn. Tiếp tục với hướng dẫn ngay bây giờ :) – Mustafa