2011-01-27 36 views
10

Tôi đang cố xóa một số từ trong chuỗi bằng regex bằng chương trình bên dưới. Của nó loại bỏ đúng cách nhưng nó chỉ xem xét trường hợp nhạy cảm. Làm thế nào để làm cho nó như là trường hợp không nhạy cảm. Tôi giữ (?1) trong phương thức replaceAll nhưng phương thức này không hoạt động.Java không phân biệt chữ hoa chữ thường không hoạt động

package com.test.java; 

public class RemoveWords { 

    public static void main(String args[]) 
    { 

     // assign some words to string 

     String sample ="what Is the latest news today in Europe? is there any thing special or everything is common."; 

      System.out.print(sample.replaceAll("(is | the |in | any)(?i)"," ")); 
    } 
} 

OUTPUT:

what Is latest news today Europe? there thing special or everything common. 

Trả lời

32

Bạn cần đặt (?i)trước một phần của mô hình mà bạn muốn làm cho trường hợp không nhạy cảm từ khóa cần xóa với ranh giới từ (\\b). Vấn đề xảy ra bởi vì có thể có hai từ khóa cái khác nhau từ một không gian.

Nếu bạn muốn xóa các từ khóa chỉ khi chúng được bao quanh bởi gian, sau đó bạn có thể sử dụng lookahead tích cực và lookbehind như:

(?i)(?<=)(is|the|in|any)(?=) 

See it

+0

Cảm ơn. Bây giờ nó làm việc – JavaGeek

+0

"the" tồn tại trong đầu ra. nó không thay thế bằng "" và nó không xóa "IS", xem http://www.ideone.com/HMxLr –

+0

Đúng. Tại sao nó không thay thế "the" bằng "". Bất kỳ vấn đề với regex – JavaGeek

1

thay đổi is để [iI][sS]

sample.replaceAll("([iI][sS] ... 
+0

Nó hoạt động quá trình nhưng dài mà chúng ta cần để đặt mọi nhân vật. Có cách nào tốt hơn không? – JavaGeek

+0

Tôi không thể làm điều này. Tôi nghĩ câu trả lời @Cybernate có vẻ chính xác –

3

Tôi không nghĩ rằng bạn có thể xác định trường hợp không nhạy cảm với các nhanh chóng thay thế. Thử một mẫu thay thế. không gian

System.out.print(sample.replaceAll("(?i)\\b(?:is|the|in|any)\\b"," ")); 
            ^^^^ 

See it

tôi đã thay thế xung quanh: ví dụ:

package com.test.java; 

public class RemoveWords { 

public static void main(String args[]) { 
    // assaign some words to string 
    String sample ="what Is the latest news today in Europe? is there any thing special or everything is common."; 
    String regex = "(is | the |in | any)" 
    System.out.print 
    (
    Pattern.compile(regex, Pattern.CASE_INSENSITIVE).matcher(sample).replaceAll("") 
); 
} 
} 
+0

+1. vì không đấu tranh với regex –

+1

Xin lỗi vì downvote, nhưng như @codaddicts trả lời cho thấy, bạn * có thể * sử dụng những lá cờ đó trong 'String.replaceAll()'. –

+0

@ Joachim: Đừng lo. Tôi upvoted @Codaddicts câu trả lời kể từ khi tôi đã biết làm thế nào để sử dụng cờ trong String.replaceAll – Chandu

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