Come faccio a dividere una stringa con un delimitatore a più caratteri in C #?

Cosa succede se voglio dividere una stringa usando un delimitatore che è una parola?

Ad esempio, This is a sentence .

Voglio dividere is e ottenere This e a sentence .

In Java , posso inviare una stringa come delimitatore, ma come faccio a farlo in C# ?

http://msdn.microsoft.com/en-us/library/system.string.split.aspx

Esempio dai documenti:

 string source = "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]"; string[] stringSeparators = new string[] {"[stop]"}; string[] result; // ... result = source.Split(stringSeparators, StringSplitOptions.None); foreach (string s in result) { Console.Write("'{0}' ", String.IsNullOrEmpty(s) ? "<>" : s); } 

Puoi usare il metodo Regex.Split , qualcosa di simile a questo:

 Regex regex = new Regex(@"\bis\b"); string[] substrings = regex.Split("This is a sentence"); foreach (string match in substrings) { Console.WriteLine("'{0}'", match); } 

Modifica : questo soddisfa l’esempio che hai dato. Si noti che un ordinario String.Split si divide anche in ” è ” alla fine della parola “Questo”, quindi perché ho usato il metodo Regex e incluso i confini di parola attorno al ” è “. Nota, tuttavia, che se hai appena scritto questo esempio per errore, allora String.Split sarà probabilmente sufficiente.

Sulla base delle risposte esistenti su questo post, questo semplifica l’implementazione 🙂

 namespace System { public static class BaseTypesExtensions { ///  /// Just a simple wrapper to simplify the process of splitting a string using another string as a separator ///  ///  ///  ///  public static string[] Split(this string s, string separator) { return s.Split(new string[] { separator }, StringSplitOptions.None); } } } 
 string s = "This is a sentence."; string[] res = s.Split(new string[]{ " is " }, StringSplitOptions.None); for(int i=0; i 

EDIT: Il "è" è riempito su entrambi i lati con spazi nella matrice al fine di preservare il fatto che si desidera solo la parola "è" rimosso dalla frase e la parola "questo" per rimanere intatto.

…In breve:

 string[] arr = "This is a sentence".Split(new string[] { "is" }, StringSplitOptions.None); 

È ansible utilizzare String.Replace () per sostituire la stringa di divisione desiderata con un carattere che non si verifica nella stringa e quindi utilizzare String.Split su quel carattere per dividere la stringa risultante per lo stesso effetto.

O usare questo codice; (lo stesso: new String [])

 .Split(new[] { "Test Test" }, StringSplitOptions.None) 

Ecco una funzione di estensione per eseguire la divisione con un separatore di stringhe:

 public static string[] Split(this string value, string seperator) { return value.Split(new string[] { seperator }, StringSplitOptions.None); } 

Esempio di utilizzo:

 string mystring = "one[split on me]two[split on me]three[split on me]four"; var splitStrings = mystring.Split("[split on me]"); 
 var dict = File.ReadLines("test.txt") .Where(line => !string.IsNullOrWhitespace(line)) .Select(line => line.Split(new char[] { '=' }, 2, 0)) .ToDictionary(parts => parts[0], parts => parts[1]); or enter code here line="to=xxx@gmail.com=yyy@yahoo.co.in"; string[] tokens = line.Split(new char[] { '=' }, 2, 0); ans: tokens[0]=to token[1]=xxx@gmail.com=yyy@yahoo.co.in 
 string strData = "This is much easier" int intDelimiterIndx = strData.IndexOf("is"); int intDelimiterLength = "is".Length; str1 = strData.Substring(0, intDelimiterIndx); str2 = strData.Substring(intDelimiterIndx + intDelimiterLength, strData.Length - (intDelimiterIndx + intDelimiterLength));