2009-09-26 27 views

risposta

7
myString = myString.Substring(0,myString.IndexOf(',')); 
+1

non dovrebbe essere myString.IndexOf? – dove

+0

Oops! Sì grazie! :-) –

+0

Lancia anche un'eccezione ArgumentOutOfRange se la stringa non contiene alcuna virgola. –

3
string NoComma = ""; 
string example = "text before first comma, more stuff and another comma, there"; 
string result = example.IndexOf(',') == 0 ? NoComma : example.Split(',')[0]; 
+0

Perché non usare solo example.Split (',') [0] di per sé? – thecoop

+0

@thecoop questo sarebbe se si volesse controllare su cosa risultato se non ci fosse alcuna virgola nell'esempio, la domanda non era esplicita su questo. incredibile quanta varianza si può ottenere sul più banale dei requisiti ... – dove

+0

grazie, come posso fare con più virgole? Voglio salvare tutte le parole tra le virgole. Alina – alina

36
substring = str.Split(',')[0]; 

Se str non contiene alcuna virgola, stringa sarà la stessa come str.

MODIFICA: come con la maggior parte delle cose, le prestazioni variano a seconda dei casi limite. Se ci sono molte e molte virgole, questo creerà molte istanze String nell'heap che non verranno utilizzate. Se è una stringa di 5000 caratteri con una virgola vicino all'inizio, il metodo IndexOf + Substring funzionerà molto meglio. Tuttavia, per stringhe ragionevolmente piccole questo metodo funzionerà correttamente.

+2

Sì, la chiave non ha bisogno di controllare nulla. –

+0

+1 anche da parte mia. Bella soluzione –

+2

Si noti che questo è incredibilmente inefficiente per le stringhe grandi che contengono una virgola vicino al loro inizio. 'String.IndexOf' si fermerà quando trova la prima virgola. 'String.Split' passerà sempre attraverso la stringa _entire_. Considera "Ciao, mondo! Ho una storia molto lunga da dirti". + [6000 personaggi in più] + "Spero ti sia piaciuto!". Questo è un enorme fattore di rallentamento che hai lì. – Joren

8

È possibile utilizzare IndexOf() per individuare la virgola, quindi estrarre la sottostringa. Se sei sicuro che avrà sempre la virgola, puoi saltare il controllo.

 string a = "asdkjafjksdlfm,dsklfmdkslfmdkslmfksd"; 
     int comma = a.IndexOf(','); 
     string b = a; 
     if (comma != -1) 
     { 
      b = a.Substring(0, comma); 
     } 
     Console.WriteLine(b); 
4

Alina, in base a ciò che hai scritto sopra, quindi Split funzionerà per voi.

string[] a = comment.Split(','); 

dato il tuo stringa esempio, allora a [0] = "aaa", un [1] = "bbbbb", una [2] = "cccc", e di un [3] = "dddd"

+0

Hi Ian, Grazie, questo mi ha aiutato :) – alina

10
var firstPart = str.Split(new [] { ',' }, 2)[0] 

Secondo parametro indica il numero massimo di parti. Specificando 2 si assicura che le prestazioni siano buone anche se ci sono molte e molte virgole.

+1

Buona risposta ma il formato non è corretto (almeno in .NET 4.0). .Split richiede un array di caratteri in questo caso. ad esempio 'var firstPart = str.Split (new char [] {'{'}, 2);' – Grax

+0

@Grax, l'ho risolto. Per tua informazione, non hai bisogno di 'char', il compilatore dedurrà il tipo di array per te. –

Problemi correlati