2009-07-14 12 views

risposta

257

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

Esempio dalla documentazione:

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); 
} 
+7

Questo in realtà ritorna: 'Th' '' 'una frase' con l'esempio dato in questione Forse questo è ciò che vuole realmente, ma non è quello che ha specificato. – IRBMe

+4

Questo è solo un esempio ... Il punto è: c'è un String.Split che prende le stringhe come delimitatori. –

+1

Sì, ma non lo fa che cosa specifica la domanda Devi usare qualcosa di più intelligente per ottenere l'output specificato Ora, se la domanda specificata è effettivamente ciò che il richiedente vuole * è una domanda diversa, ma la domanda qui non può essere risolta banalmente con solo String.Split. – IRBMe

51

È possibile utilizzare il metodo Regex.Split, qualcosa di simile:

Regex regex = new Regex(@"\bis\b"); 
string[] substrings = regex.Split("This is a sentence"); 

foreach (string match in substrings) 
{ 
    Console.WriteLine("'{0}'", match); 
} 

Edit: Questo soddisfa l'esempio che ha dato. Si noti che un normale String.Split sarà anche dividere il "è" alla fine della parola "Questa", da qui il motivo per cui ho usato il metodo Regex e comprendeva la parola confini di tutto il "è" . Nota, tuttavia, che se hai appena scritto questo esempio per errore, probabilmente String.Split sarà sufficiente.

+0

@ EDIT: non ero sicuro sia, ma è comunque possibile utilizzare il normale stringa divisa e spazi pad solo su entrambi i lati se il suo obiettivo è quello di rimuovere solo la parola " è". – ahawker

+1

Anche questo non funziona (almeno non senza uno sforzo molto maggiore), perché non sai se lo spazio dovrebbe andare a sinistra, a destra o entrambi senza conoscere le posizioni della parola che è stata divisa in stringa. – IRBMe

+0

Sembra troppo complicato in quanto String.Splity consente di suddividere su una stringa già ... –

4

È possibile utilizzare String.Replace() per sostituire la stringa split desiderata con un carattere che non si verifica nella stringa e quindi utilizzare String. Dividi su quel personaggio per dividere la stringa risultante per lo stesso effetto.

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

for(int i=0; i<res.length; i++) 
    Console.Write(res[i]); 

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

+9

Ovviamente questo rompe per la frase "È quello che è". – JohnFx

-5
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)); 
+15

Prima di postare il codice, dovresti probabilmente provare a eseguirlo attraverso un compilatore prima, a meno che tu non denoti che non lo hai. Manca un punto e virgola dalla prima riga e str1 & str2 non sono definiti. Per non parlare del fatto che il codice in realtà non funziona come voleva l'OP. Questo codice lo divide in "Th" e "è molto più semplice". – mandreko

27

Sulla base delle risposte esistenti in questo post, questo semplificare l'attuazione :)

namespace System 
{ 
    public static class BaseTypesExtensions 
    { 
     /// <summary> 
     /// Just a simple wrapper to simplify the process of splitting a string using another string as a separator 
     /// </summary> 
     /// <param name="s"></param> 
     /// <param name="pattern"></param> 
     /// <returns></returns> 
     public static string[] Split(this string s, string separator) 
     { 
      return s.Split(new string[] { separator }, StringSplitOptions.None); 
     } 


    } 
} 
+7

+1, questo urla per un metodo di estensione. Quasi sciocco che questo non sia uno dei sovraccarichi incorporati. –

+7

@ToddMenier Cosa intendi "quasi"? – mwardm

4

... In breve:

string[] arr = "This is a sentence".Split(new string[] { "is" }, StringSplitOptions.None); 
0
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="[email protected][email protected]"; 
string[] tokens = line.Split(new char[] { '=' }, 2, 0); 

ans: 
tokens[0]=to 
token[1][email protected][email protected] 
3

o utilizzare questo codice; (Lo stesso: new String [])

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