2009-09-27 9 views
10

Program ma użytkownicy wpisując ciąg rozdzielany przecinkami do tablicy:co jest najczystszym sposób usunąć wszystkie dodatkowe spacje z wejścia użytkownika rozdzielany przecinkami ciąg do tablicy

basketball, baseball, soccer ,tennis 

Może istnieć przestrzenie między przecinki, a może nie.

Jeśli ten ciąg był po prostu split() na przecinku, niektóre elementy w tablicy mogą zawierać spacje przed lub po nich.

Jaki jest najlepszy sposób na wyczyszczenie?

+3

Po prostu interesujące: autor jest członkiem SO przez rok i zadał 462 pytanie. Dziwne, że ktoś ma nowe pytanie codziennie ... – Kamarey

+1

zawsze się uczyć :) – leora

+0

Czy jesz, śpisz? :) – Kamarey

Odpowiedz

18

Można użyć do tego Regex.Split:

string[] tokens = Regex.Split("basketball, baseball, soccer ,tennis", @"\s*,\s*"); 

regex \s*,\s* można odczytać jako: „dopasuj zero lub więcej białych znaków, a następnie przecinkiem następuje zero lub więcej białych znaków ".

0

String.Replace(" ","") zanim podzielić ciąg

+1

To nie jest dobre, jeśli wartość zawiera spacje ... – Guffa

+1

Pytanie OP nie zawierało spacji, ale masz rację, to nie będzie działać dla wartości ze spacjami (patrz odpowiedź Davida Andresa dla lepszego zastąpienia) – SwDevMan81

1

podzielić elementy na przecinkiem:

string[] splitInput = yourInput.Split(',', StringSplitOption.RemoveEmptyEntries); 

a następnie użyć

foreach (string yourString in splitInput) 
{ 
    yourString.Trim(); 
} 
3

Można podzielić na każdym przecinkiem lub spacją, i usunąć puste wpisy (między przecinkiem i spacją):

string[] values = delimitedString.Split(new char[]{',',' '}, StringSplitOption.RemoveEmptyEntries); 

Edit:
Jednak jako że nie działa z wartościami, które zawierają spacje, zamiast można podzielić na możliwych wariantów, jeśli wartości mogą zawierać spacji:

string[] values = delimitedString.Split(new string[]{" , ", " ,", ", ", ","}, StringSplitOptions.None); 
+1

Jak inni podkreślili moją odpowiedzią, będzie to miało problemy z rozstawionymi wartościami "futbol amerykański, tenis stołowy" – SwDevMan81

+0

@SwDevMan: Tak, masz rację. Dodano odmianę, która obsługuje wartości zawierające spacje. – Guffa

+0

dotyczące drugiego rozwiązania: nie będzie można wyświetlić wszystkich możliwych kombinacji spacji i przecinków (np. 3 spacje, 1 przecinek, 2 spacje, ...) – M4N

3
string s = "ping pong, table tennis, water polo"; 
string[] myArray = s.Split(','); 
for (int i = 0; i < myArray.Length; i++) 
    myArray[i] = myArray[i].Trim(); 

który zachowa spacje we wpisach.

0

Najpierw podzielę tekst na ",", a następnie użyję metody przycinania, aby usunąć spacje na początku i końcu każdego ciągu. Spowoduje to dodanie do ciągu znaków ciągu znaków ze spacjami.

8
string[] values = delimitedString.Split(',').Select(s => s.Trim()).ToArray(); 
Powiązane problemy