2011-11-20 14 views
6

Coś jak: How to split String with some separator but without removing that separator in Java?Dzielenie łańcucha przez spację bez usuwania miejsca?

muszę wziąć "Hello World" i dostać [ "Hello", "", "World"]

+6

Dlaczego? Dlaczego nie możesz po prostu założyć, że pomiędzy każdym z dwóch elementów istnieje przestrzeń? – SLaks

+1

Dlaczego dokładnie? Wiesz, że separator jest spacją, więc dla każdego elementu wynikowej tablicy byłby odstęp między sąsiadującymi elementami. Jeśli użyjesz metody string.Join(), możesz umieścić to miejsce z powrotem. Jestem zaskoczony, dlaczego potrzebujesz tego w wynikach podzielonych. – slugster

+0

Co byś chciał, gdyby cześć i świat zostały rozdzielone przez więcej niż jedno miejsce? –

Odpowiedz

1

Można użyć regex, choć prawdopodobnie jest przesadą:

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

Jeśli podzielisz tylko granicę słowa, otrzymasz coś bardzo zbliżonego do tego, o co poprosisz.

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

ARR [] = { "", "A", "", "szybki", "", "br" "", "lis", "" }

+1

Z tym że 'string.Split()' nie działa z wyrażeń regularnych. – svick

+0

Tak, widziałem odniesienie do Javy w pierwszym wierszu opisu i przeoczyłem, że był tam znacznik dla C#. – phatfingers

+0

Poprawiłem przykładowy kod napisany w języku C#. Wyniki tablicy są takie same. – phatfingers

16

Możesz użyć do tego celu Regex.Split(). Jeśli dołączyć wzór na przechwytywanie nawiasy, zostanie on uwzględniony w wyniku TOO:

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

daje dokładnie to, czego chciał.

+0

+1 dla eleganckiego rozwiązania. Dlaczego nie uznał twojej odpowiedzi za poprawną ... –

Powiązane problemy