2010-11-18 21 views
2

Aşağıdaki dizesi vardır:Java: String bölme

üç parçaya bölmek istediğiniz
 Mr John Smith Dickson <[email protected]> 

:

1 kısım - Bay
2 bölüm - John Smith Dickson
3 kısmı - [email protected]

Ben bu getirmeye hakkında nasıl gidebileceğimi ile karıştı, herkes yardımcı olabilir?

yukarıda adı sadece örnek olup, adı örneğin, değişiklik olabilir. John, John Smith, John Smith Dickson

+0

ilk dize – Emil

+0

hiçbir e-posta olup

Regex in action.

^([A-Z][a-z]{1,2})\s+([^<]*)<(.*?)>$ 
u basitçe sadece bu ad için veya böyle bir formatta genel herhangi bir isim bölünmüş istiyorsun. – Emil

cevap

3

Bir düzenli ifade kullanmalıdır. İlk kelimeyi beyaz boşluk, daha sonra da boşluk ile ayrılmış olan sonraki üç kelimeyi, sonra köşeli parantez içindeki şeyi yakalayabilirsiniz.

bu herhangi bir kelime karakterle anlamına w \

(\w+)\s+(\w+\s+\w+\s+\w+)\s*<(.*)> 

çalışır. + 1 veya daha fazla demektir. herhangi bir boşluk karakteri anlamına gelir.() Içindeki şeyler yakalanır. Eğer java kodunda kullanmak istiyorsunuz regex sen böler ile bu yapabileceğini

http://www.regexplanet.com/simple/index.html 

notu burada test edilen

(\\w+)\\s+(\\w+\\s+\\w+\\s+\\w+)\\s*<(.*)> 

olmakla her zaman sen bölme, daha sonra daha sonra belirteçleri, bölme jetonları alıyorsanız Daha fazla jeton alıp, tekrar bölmek, çok karmaşık bir şey yapıyorsunuz. Regex şeyleri büyük ölçüde basitleştirir.

+0

regex de iyi ayet değilim, eğer benim için örnek regex veremezseniz, teşekkürler – Apache

+0

@apache i regext ekledim – hvgotcodes

1

Sen .split (" ") yourstring kullanmak isteyeceksiniz; Bu, dizeyi her bir sözcüğe (boşluklara göre) böler. Her kişi üç ismi vardır biliyorsanız, aşağıdaki söyleyebiliriz:

String myString = "Mr John Smith Dickson [email protected]";  
String[] splitResult = myString.split(" "); 
String title = splitResult[0]; \\ Mr 
String name = splitResult[1]+" "+splitResult[2]+" "+splitResult[3]; \\ John Smith Dickson 
String email = splitResult[4]; 

Bir kişi kaç isim bilmiyorsanız

, biraz daha karmaşık hale gelir.

1
String mister = "Mr John Smith Dickson - [email protected]"; 
String[] misters = mister.split(" "); 

Birinci kısım: İkinci

String first = misters[0]; 

: Üçüncü

String second = misters[1] + " " + misters[2] + " " + misters[3]; 

:

String third = misters[5]; 
0

Java bir String.split (Dize regex) sahiptir kullanabilirdin yöntem böyle:

String s = "Bay John Smith Dickson"; Dize [] parts = s.split (""); Size boşluklarla ayrılmış parçaların bir dize dizisi verecektir

.daha sonra

Sting title = part [0]; Dize adı = bölüm [1] + "" + bölüm [2] + "" + bölüm [3];

0

Bazı Regex'i kullanın.

Mr:

"([A-Za-z]{2,3}) " 

John Smith Dickson

"[A-zA-z] (.*)<" 

Eposta

".*<(.*)>" 
0

her zaman yapabilirsiniz dizesinin başında Mr, Mrs, Dr gibi kısaltmalar varsa regex kullanın:

1
String s = "Mr John Smith Dickson<[email protected]>"; 
Pattern pattern = Pattern.compile("(\\w+)\\b(.+)<(.+)>"); 
Matcher matcher = pattern.matcher(s); 

if (matcher.matches()) { 
String title = matcher.group(1); 
String name = matcher.group(2); 
String email = matcher.group(3); 
}