2011-01-27 31 views
10

Aşağıdaki program kullanılarak regex kullanarak bir dizede bazı sözcükleri kaldırmaya çalışıyorum. Düzgün kaldırılıyor ancak sadece büyük/küçük harfe duyarlı. Nasıl büyük/küçük harfe duyarlı değildir. 'u replaceAll yönteminde tuttum ancak çalışmadı.Java regex büyük harf duyarsızlığı çalışmıyor

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)"," ")); 
    } 
} 

ÇIKIŞ: Ben değiştirmek çabuk ile duyarsız durumda belirtebilirsiniz sanmıyorum is

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

cevap

32

: etrafında

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

See it

yerime başkasının ettik alanlarda kelime sınırıyla kaldırılacak anahtar kelimeler (\\b). Sorun, sadece bir boşlukla ayrılmış birbiri ardına iki anahtar kelime olabileceği için ortaya çıkar.

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

See it

+0

'daki bayrakları nasıl kullanacağımı bildiğim için @Codaddicts yanıtını buldum. Şimdi – JavaGeek

+0

çalışıyor "çıktı" var. "" ile değiştirmedi ve "IS" yi kaldırmaz. http://www.ideone.com/HMxLr –

+0

Doğru. Neden "" ile "" değiştirilmiyor. Regex – JavaGeek

1

değişim. Bunun yerine bir desen deneyin. yani:

Sen duyarsız bir durumda yapmak istediğiniz desen (?i) önceki bölümü yerleştirmek gerekir
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

İhtiyacımız olan ancak uzun bir süreç çalışır: onlar boşluk çevrili yalnızca anahtar kelimeleri silmek istiyorsanız

, o zaman olduğu gibi pozitif ileri yönlü ve geriye bakan kullanabilirsiniz her karakteri koymak. – JavaGeek

+0

'un daha iyi bir yolu var mı? Bence @Cybernate cevabı doğru görünüyor –

3

[iI][sS] için

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

+1. regex ile mücadele etmediğiniz için –

+1

Downvote için özür dilerim, ama @codaddicts cevapları gösterdiği gibi, * bu * flag'leri 'String.replaceAll()' içinde kullanabilirsiniz. –

+0

@Joachim: Endişelenme yok. String.replaceAll – Chandu

İlgili konular