Java

2013-04-14 19 views
11

gr .:Java

Ben bir dize sadece kelimeleri, virgül ve boşluk içeriyorsa kontrol etmek istiyorum
String string="Marc Louie, Garduque Bautista"; 

. i normal ifadeler kullanabilirsiniz çalıştık ve aldığım en yakın şudur:

String pattern = "[a-zA-Z]+(\\s[a-zA-Z]+)+"; 

ama virgül orada ya da değil olup olmadığını o kontrol etmez. Herhangi bir öneri ?

+2

"a" virgül veya virgül? –

+0

Bir "kelime" ne anlama geliyor? Örneğinizin "Skłodowska-Curie" nin de "kelime" olacağı, ancak [a-zA-Z] aralığının dışında bir çizgi içerdiğini görüyorum. Birkaç istisnai durum söz konusu olabilir (örn. Yukarıdaki örnekte olduğu gibi). –

cevap

22

Sen Örneğin düzeninin

^[A-Za-z, ]++$ 

kullanmak gerekir

public static void main(String[] args) throws IOException { 
    final String input = "Marc Louie, Garduque Bautista"; 
    final Pattern pattern = Pattern.compile("^[A-Za-z, ]++$"); 
    if (!pattern.matcher(input).matches()) { 
     throw new IllegalArgumentException("Invalid String"); 
    } 
} 

DÜZENLEME

Michael astute comment gereğince OP bu durumda

^[A-Za-z ]++,[A-Za-z ]++$ 

çalışmak Bilmelisin tek virgül, anlamına gelebilir.

2

Neden sadece basitçe:

"[a-zA-Z\\s,]+" 
+2

'\ s, yalnızca boşluklardan daha fazla eşleşiyor. –

+0

\ s tüm boşluklarla eşleşir (ör. Sekmeler vb.) –

1

bunu kullanın iyi olacak

"(?i)[a-z,\\s]+" 
0

siz "bazı kelimeler, boşluk ve bir olmasını geçtiği yerlerde tek virgül," o zaman benim duygu bu yaklaşımı önermek demek ise:

"^[^,]* *, *[^,]*$" 

Bu, "Sıfır veya daha fazla karakterle (^) virgülle başlat, sonra sıfır veya daha fazla boşluk, sonra virgül, sonra tekrar sıfır veya daha fazla boşluk, sonra da sıfır olan sıfır veya daha fazla karakter bulabilirsin. ^) bir virgül ".