DOT

2010-10-05 28 views
34

için normal ifade. Normal ifade nedir? ve .. ?DOT

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

do something 

} 

Eşleşmeler, düzenli ifadeyi isteyen String'i kabul eder. Şimdi tüm DOT'ları MAP'ımın içinde kaldırmam gerekiyor.

cevap

58

. ihtiyaçlar bir Java dize içinde yani \. veya \\. kaçan öylesine herhangi bir karakterle eşleşir (\ kendisi Java dizeleri içinde özel bir anlamı vardır, çünkü.)

Ardından \.\. veya \.{2} tam 2 nokta eşleştirmek için kullanabilirsiniz.

+1

\. key.matches içinde yukarıdaki kodla çalışmaz – John

+7

Belirtildiği gibi, '\ .' normal ifadedir, ancak Java'da bu ifade için bir dize oluşturmak için \\.' gerekir, çünkü \ gibi Java dizeleri içinde kullanılır \ n, \ t vb. Yani \\ bir String içindeki bir literal için gereklidir. Ayrıca, 'String.matches' ifadesinin regexp'in ** tüm ** String ile eşleşmesini gerektirdiğini unutmayın. Eğer bir substring araması yapmak istiyorsanız, 'Matcher.find' – mikej

+3

'u kullanmanız gerekecektir. Ayrıca, gereksinimleri biraz açıklığa kavuşturur musunuz? Anahtarın bir nokta içerip içermediğini kontrol etmeniz gerekiyorsa, 'key.contains' kullanabilirsiniz ve gerçekten bir regexp'e ihtiyacınız yoktur. – mikej

8

...

[.]{1} 

veya

[.]{2} 

?

+0

tek noktadır maçları tüm karakterler o değil mı? –

4

[+ *?] Çoğu özel karakterin köşeli parantez içinde bir anlamı yoktur. Bu ifade +, *,? veya nokta.

3

Sadece noktalardan dizgeyi değiştirmek istiyorsanız, String.Replace()'u kullanın. Alternatif StringBuilder ile Pattern-Matcher kullanmak olacaktır, bu size noktalar arasında bulunan grupları bulabileceğinizden size daha fazla esneklik sağlar. Eğer ikincisini kullanıyorsanız, boş girişleri "\\.+" ile yoksaymanızı tavsiye ederim.

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ışı olacaktır:

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

Sen kullanmalısınız değil içeriyor

if(nom.contains(".")) 
    System.out.println("OK"); 
else 
    System.out.println("Bad"); 
İlgili konular