2016-04-05 12 views
2

Bir dizeden sözcük almam gerekiyor, ancak yalnızca en az iki karakter uzunsa. Regex kullanmalıyım. Kod çalışır, ancak her türlü sözcük için. Ne kullanmalıyım? İşte kodum:Java'da bir eşleştirmenin uzunluğu

import java.util.Scanner; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class P5_ExtractWords { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 

     String text = input.nextLine(); 
     Pattern pat = Pattern.compile("[A-Za-z]+"); 
     Matcher match = pat.matcher(text); 
     while (match.find()){ 
      System.out.printf("%s ",match.group()); 
     } 
     input.close(); 
    } 
} 
+0

Eşleştirmenin uzunluğu veya bunun gibi bir yöntem bulamıyorum. – Tokotome

cevap

3

Normal ifadenizde böyle bir şey kullanacağım. Eğer bir cevher daha fazla karakter var olduğunda tek bir karakter ve ikinci varken bu desen ile

Pattern pat = Pattern.compile("[A-Za-z][A-Za-z]+"); 

, kural ilk bölümü gerçek olacaktır. Bu örüntü, genel bir düzenli ifade yolu ile ifade edilir. Farklı cevaplarda sunulan diğerleri gibi başka kurallar da kullanabilirsiniz.

3

kalıbı:

Pattern pat = Pattern.compile("[A-Za-z]+");

araçlar bir veya daha fazla [A-Za-z] karakter.

Pattern pat = Pattern.compile("\\w{2,}"); 

desen \w[a-zA-Z0-9_] eşdeğerdir:

iki veya daha fazla için, formu kullanabilirsiniz.

Veya yalnızca mektup için

Pattern pat = Pattern.compile("[A-Za-z]{2,}"); 

. karakter

+0

En iyi cevap imo –

0

Uzunluk

^\w{5,10}$ # allows words of between 5 and 10 characters.

kelime sınırları düzenli ifadede \b kullanmak kullanmak istiyorsanız

^\w{2,}$ # allows words of more than 2 characters.

`^\w{0,10}$ # allows words of up to 10 characters. 

{n,m} n <= length <= m {n} length == n {n,} length >= n

eşleştirilecek.

Java olduğu için, ters eğik çizgi kaçmak zorunda kalacaksınız: "\\ w {1,10} \\ b". Bunu zaten biliyordun, ama daha önce beni aldım. Umarım bu Link yardımcı olabilir.