2009-09-26 41 views
34

Từ những gì tôi hiểu, dấu gạch chéo ngược (\.) có nghĩa là một ký tự của bất kỳ ký tự nào? Vì vậy, vì dấu gạch chéo ngược là một lối thoát, nên dấu gạch chéo ngược ngược lại ("\\.")Giá trị biểu thức chính quy Java.split ("\."), "Dấu gạch chéo ngược" chia cho ký tự?

Điều này làm gì với chuỗi? Tôi chỉ nhìn thấy điều này trong một mã hiện tại tôi đang làm việc trên. Từ những gì tôi hiểu, nó sẽ chia chuỗi thành các ký tự riêng lẻ. Tại sao thực hiện điều này thay vì String.toCharArray(). Vì vậy, điều này tách chuỗi thành một mảng của chuỗi chỉ chứa một char cho mỗi chuỗi trong mảng?

Trả lời

68

Đoán của tôi là bạn thiếu ký tự gạch chéo ngược ('\') là các ký tự thoát trong các chuỗi ký tự Java String. Vì vậy, khi bạn muốn sử dụng một '\' thoát trong một regex được viết như một chuỗi Java, bạn cần phải thoát khỏi nó; ví dụ.

Pattern.compile("\."); // Java syntax error 

// A regex that matches a (any) character 
Pattern.compile("."); 

// A regex that matches a literal '.' character 
Pattern.compile("\\."); 

// A regex that matches a literal '\' followed by one character 
Pattern.compile("\\\\."); 

Phương thức String.split(String separatorRegex) chia tách chuỗi thành các phân đoạn được phân tách bằng các giá trị khớp với regex. Vì vậy, str.split("\\.") sẽ tách str thành các phân đoạn được phân cách bằng một chữ '.' tính cách.

+0

:: Nó hoạt động ổn. Nhưng bạn có thể hình dung thêm về điều này, như tại sao bốn dấu gạch chéo ngược? Không nên có ba? – Oliver

+2

Dấu gạch chéo ngược chữ phải được thoát một lần trong một regex. Điều đó cho 2. Những 2 dấu gạch chéo ngược cả hai cần phải được thoát trong một chuỗi chữ. Điều đó làm cho 4. Ba dấu gạch chéo ngược sẽ cho bạn một lỗi biên dịch Java. Hãy thử và cảm nhận bản thân mình. –

+0

Tại sao Pattern.compile ("\."); tạo ra lỗi cú pháp? – adub3

7

Regex "." sẽ khớp với bất kỳ ký tự nào khi bạn nói. Tuy nhiên, dấu chấm thoát "\". sẽ khớp với các ký tự dấu chấm. Vì vậy, 192.168.1.1 chia thành "\". sẽ dẫn đến {"192", "168", "1", "1"}.

Từ ngữ của bạn không hoàn toàn rõ ràng, nhưng tôi nghĩ đây là những gì bạn đang yêu cầu.

Các vấn đề liên quan