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.
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.
. 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}
veya
[.]{2}
?
tek noktadır maçları tüm karakterler o değil mı? –
[+ *?] Çoğu özel karakterin köşeli parantez içinde bir anlamı yoktur. Bu ifade +, *,? veya nokta.
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
Sen kullanmalısınız değil içeriyor
if(nom.contains("."))
System.out.println("OK");
else
System.out.println("Bad");
\. key.matches içinde yukarıdaki kodla çalışmaz – John
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
'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