SORU
27 ŞUBAT 2013, ÇARŞAMBA


Nasıl bir dize Java tek rakam varsa kontrol etmek için

String sınıfı Java'da eğer benim dize tek haneli düzenli ifade kullanarak, sahip yöntemini kontrol etmek için bu yöntemi kullanmak nasıl maçlar denir. Örnekler ile aşağıda denedim, ama her ikisi de bana sonuç olarak yanlış döndü.

String regex = "[0-9]";
String data = "23343453";
System.out.println(data.matches(regex));

String regex = "^[0-9]";
String data = "23343453";
System.out.println(data.matches(regex));

CEVAP
27 ŞUBAT 2013, ÇARŞAMBA


Deneyin

String regex = "[0-9] ";

ya

String regex = "\\d ";

Java başı olarakdüzenli ifadeler, "anlamına gelir, bir veya daha fazla kez" ve \d anlamı, "bir rakam".

Not:" dir . eğik çizgi "çift ^em>çıkış sırasıtek bir ters eğik çizgi, bu yüzden \\d Dize verir bir java için gerçek sonuç: \d

Referanslar:

Java Regular Expressions

Java Character Escape Sequences


Düzenleme:diğer cevaplar içinde bazı karışıklıklar nedeniyle, bir test durumu yazıyorum ve bazı açıklayacak daha fazla ayrıntı şeyler.

Öncelikle, eğer bu çözümün doğruluğu (veya diğerleri) hakkında şüpheniz varsa, lütfen bu sınama durumu çalıştırın:

String regex = "\\d ";

// positive test cases, should all be "true"
System.out.println("1".matches(regex));
System.out.println("12345".matches(regex));
System.out.println("123456789".matches(regex));

// negative test cases, should all be "false"
System.out.println("".matches(regex));
System.out.println("foo".matches(regex));
System.out.println("aa123bb".matches(regex));

Soru 1: Bu maç olmayacak yani normal ifade için ^ $ eklemek için gerekli"" ? aa123bb Değil

Hayır.Java, matches yöntemi soruda belirtildi) tam bir dize, parçaları olmayan maçlar. Diğer bir deyişle, gerekli ^\\d $ ayrıca doğru olsa bile () kullanmaya gerek yoktur. Son negatif test durumuna bakın.

Lütfen "düzenli ifade denetleyicisi" o zaman bu farklı davranabilir. bir online kullanıyorsanız unutmayın Java'da bir string parçaları eşleştirmek için find yöntemi kullanın, burada detaylı olarak nitelendirdi

Difference between matches() and find() in Java Regex

Soru 2: Bu normal ifade boş dize "" uyuşmuyordur.

Hayır.Bir düzenli ifade \\d* boş dize maç olur, ama \\d gelmez. * yıldız anlamına gelir veya daha fazla, artı ise anlamına gelir, bir veya daha fazla sıfır. İlk negatif test durumuna bakın.

Soru 3: Bu normal ifade Deseni derlemek için daha erken Değil mi?

Evet.Kesinlikle daha hızlı derlemek için bir düzenli ifade Deseni bir kez yerine her çağırma matches, ve eğer öyleyse performans etkileri olan önemli bir Pattern olabilir derlenen ve eskiden olduğu gibi bu

Pattern pattern = Pattern.compile(regex);
System.out.println(pattern.matcher("1").matches());
System.out.println(pattern.matcher("12345").matches());
System.out.println(pattern.matcher("123456789").matches());

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • spederson7

    spederson7

    17 Temmuz 2006
  • sWooZie

    sWooZie

    9 ŞUBAT 2006
  • VOICE TV

    VOICE TV

    2 Aralık 2010