2010-10-05 40 views
34

Cụm từ thông dụng là gì. và ..?cụm từ thông dụng cho DOT

if(key.matches(".")) { 

do something 

} 

Đối sánh chấp nhận Chuỗi yêu cầu cụm từ thông dụng. Bây giờ tôi cần phải loại bỏ tất cả DOT bên trong MAP của tôi.

Trả lời

58

. phù hợp với bất kỳ ký tự nên nhu cầu thoát ví dụ \., hoặc \\. trong một chuỗi Java (vì \ chính nó có ý nghĩa đặc biệt trong chuỗi Java.)

Sau đó bạn có thể sử dụng \.\. hoặc \.{2} để phù hợp chính xác 2 chấm.

+1

\. không làm việc với mã trên trong key.matches – John

+7

Như đã đề cập, '\ .' là biểu thức chính quy nhưng để xây dựng một String cho biểu thức này trong Java, bạn sẽ cần' \\. 'vì \ được sử dụng trong các chuỗi Java cho những thứ như \ n, \ t vv vì vậy \\ là cần thiết cho một chữ \ trong một chuỗi. Ngoài ra, lưu ý rằng 'String.matches' yêu cầu regexp để khớp với ** toàn bộ chuỗi **. Nếu bạn muốn thực hiện tìm kiếm chuỗi con, bạn sẽ cần sử dụng 'Matcher.find' – mikej

+3

Ngoài ra, bạn có thể làm rõ các yêu cầu một chút không. Nếu bạn chỉ cần kiểm tra xem khóa có chứa dấu chấm thì bạn có thể sử dụng 'key.contains' và không thực sự cần một regexp hay không. – mikej

8

...

[.]{1} 

hoặc

[.]{2} 

?

+0

chấm duy nhất là cho tất cả các nhân vật isnt nó? –

4

[+ * ?.] Hầu hết các ký tự đặc biệt không có ý nghĩa bên trong dấu ngoặc vuông. Biểu thức này khớp với bất kỳ dấu +, * nào? hoặc dấu chấm.

3

Sử dụng String.Replace() nếu bạn chỉ muốn thay thế các dấu chấm từ chuỗi. Thay thế sẽ là sử dụng Pattern-Matcher với StringBuilder, điều này giúp bạn linh hoạt hơn vì bạn có thể tìm thấy các nhóm nằm giữa các dấu chấm. Nếu sử dụng sau, tôi khuyên bạn nên bỏ qua các mục trống với "\\.+".

public static int count(String str, String regex) { 
    int i = 0; 
    Pattern p = Pattern.compile(regex); 
    Matcher m = p.matcher(str); 
    while (m.find()) { 
     m.group(); 
     i++; 
    } 
    return i; 
} 

public static void main(String[] args) { 
    int i = 0, j = 0, k = 0; 
    String str = "-.-..-...-.-.--..-k....k...k..k.k-.-"; 

    // this will just remove dots 
    System.out.println(str.replaceAll("\\.", "")); 
    // this will just remove sequences of ".." dots 
    System.out.println(str.replaceAll("\\.{2}", "")); 
    // this will just remove sequences of dots, and gets 
    // multiple of dots as 1 
    System.out.println(str.replaceAll("\\.+", "")); 

    /* for this to be more obvious, consider following */ 
    System.out.println(count(str, "\\.")); 
    System.out.println(count(str, "\\.{2}")); 
    System.out.println(count(str, "\\.+")); 
} 

Kết quả sẽ là:

--------kkkkk-- 
-.--.-.-.---kk.kk.k-.- 
--------kkkkk-- 
21 
7 
11 
1

Bạn nên sử dụng chứa không phù hợp

if(nom.contains(".")) 
    System.out.println("OK"); 
else 
    System.out.println("Bad"); 
Các vấn đề liên quan