2012-01-19 13 views
166

Powiel możliwe:
How do I split a string by a multi-character delimiter in C#?Jak mogę podzielić ciąg z ogranicznikiem łańcucha?

Mam ten ciąg:

My name is Marco and I'm from Italy 

chciałbym go podzielić, z ogranicznikiem is Marco and, więc powinienem dostać tablicę z

  • My name w [0] i
  • I'm from Italy w [1].

Jak mogę to zrobić za pomocą C#?

Próbowałem z

.Split("is Marco and") 

ale chce tylko pojedynczy char.

+4

[W] (http://stackoverflow.com/questions/1126915/how -do-i-split-a-string-by-a-multi-character-delimiter-in-c) zostało zadane wcześniej. –

+0

powiązane https://stackoverflow.com/questions/315358/c-sharp-syntax-split-string-into-array-by-comma-convert-to-generic-list-and – barlop

Odpowiedz

333
string[] tokens = str.Split(new[] { "is Marco and" }, StringSplitOptions.None); 

Jeśli masz ogranicznik pojedynczego znaku (na przykład ,) można zmniejszyć do (uwaga na pojedyncze cudzysłowy):

string[] tokens = str.Split(','); 
+0

możesz usunąć 'string':' .Split (nowy [] {"jest Marco i"}, StringSplitOptions.None) ' – pomber

+4

' nowy ciąg [] 'jest zbędny w tym przypadku, możesz po prostu użyj 'new []' – pomber

+4

Zwróć uwagę na pojedyncze cudzysłowy w str.Split (","); zamiast str.Split (","); Zajęło mi trochę czasu, aby zauważyć – gsubiran

4

Można użyć metody IndexOf, aby uzyskać położenie ciągu znaków, a następnie podzielić go przy użyciu tej pozycji i długości szukanego ciągu.


Można również użyć wyrażenia regularnego. Prosty google search okazało z tego

using System; 
using System.Text.RegularExpressions; 

class Program { 
    static void Main() { 
    string value = "cat\r\ndog\r\nanimal\r\nperson"; 
    // Split the string on line breaks. 
    // ... The return value from Split is a string[] array. 
    string[] lines = Regex.Split(value, "\r\n"); 

    foreach (string line in lines) { 
     Console.WriteLine(line); 
    } 
    } 
} 
22
.Split(new string[] { "is Marco and" }, StringSplitOptions.None) 

Rozważmy surronding przestrzenie "is Marco and". Czy chcesz uwzględnić spacje w wynikach, czy też chcesz je usunąć? Jest całkiem możliwe, że chcesz użyć jako separatora " is Marco and " ...

8

Zamiast tego spróbuj this function.

string source = "My name is Marco and I'm from Italy"; 
string[] stringSeparators = new string[] {"is Marco and"}; 
var result = source.Split(stringSeparators, StringSplitOptions.None); 
15

Dzielisz strunę na dość złożony podciąg. Zamiast String.Split użyłbym wyrażeń regularnych. Później jest bardziej do tokenizacji tekstu.

Na przykład:

var rx = new System.Text.RegularExpressions.Regex("is Marco and"); 
var array = rx.Split("My name is Marco and I'm from Italy"); 
3

czytający ten: http://www.dotnetperls.com/split , a roztwór może być takim jak:

var results = yourString.Split(new string[] { "is Marco and" }, StringSplitOptions.None); 
Powiązane problemy