2011-11-20 17 views
6

şey gibi: muhtemelen bir overkill olmasına rağmen How to split String with some separator but without removing that separator in Java?Alanı boş bırakmadan bir dize ayırma?

Ben, Bir normal ifadeler kullanabilirsiniz

+6

Neden? Neden her iki element arasında bir boşluk olduğunu varsaymıyorsun? – SLaks

+1

Neden tam olarak? Ayırıcının bir boşluk olduğunu biliyorsunuz, sonuç olarak ortaya çıkan dizinin her elemanı için bitişik elemanlar arasında bir boşluk olacaktı. String.Join() işlevini kullanırsanız, alanı tekrar yerleştirebilirsiniz. Ayrık sonuçlarda neden ihtiyaç duyduğunuza şaşıyorum. – slugster

+0

Merhaba ve dünya birden fazla alan tarafından ayrıldıysa, geriye ne istersiniz? –

cevap

1

[ "Merhaba", "", "Dünya"] "Hello World" alıp almak gerekir:

StringCollection resultList = new StringCollection(); 
Regex regexObj = new Regex(@"(?:\b\w+\b|\s)"); 
Match matchResult = regexObj.Match(subjectString); 
while (matchResult.Success) { 
    resultList.Add(matchResult.Value); 
    matchResult = matchResult.NextMatch(); 
} 
1

Yalnızca sözcük sınırına bölünürseniz, sorduğunuz şeye çok yakın bir şey elde edersiniz.

string[] arr = Regex.Split("A quick brown fox.", "\\b"); 

dizi [] = { "", "A", "", "hızlı", "" "kahverengi", "" "tilki", ""

+1

Bunun dışında string.Split() 'normal ifadelerle çalışmaz. – svick

+0

Evet, açıklamanın ilk satırında Java'ya yapılan referansı gördüm ve C# için bir etiket olduğunu göz ardı ettim. – phatfingers

+0

C# ile yazılacak örnek kodu gözden geçirdim. Dizi sonuçları aynıdır. Zarif çözüm için – phatfingers

16

Bunun için Regex.Split() kullanabilirsiniz. Eğer parantez yakalama desen içine alırsanız, çok sonucu dahil edilecektir:

Regex.Split("Hello World", "()") 

istediğini tam olarak ne verir.

+0

+ 1. Cevabını neden doğru olarak işaretlemedi? –