Ich teile eine Zeichenfolge basierend auf Leerzeichen wie folgt auf:
string myStr = "The quick brown fox jumps over the lazy dog";
char[] whitespace = new char[] { ' ', '\t' };
string[] ssizes = myStr.Split(whitespace);
Es ist lästig, das char [] -Array überall in meinem Code zu definieren. Ich möchte dies tun. Gibt es eine effizientere Methode, bei der kein Zeichenarray erstellt werden muss (das fehleranfällig ist, wenn es an verschiedenen Stellen kopiert wird)?
Antworten:
Wenn Sie nur anrufen:
oder:
dann wird angenommen, dass Leerraum das Teilungszeichen ist. Auf der
string.Split(char[])
Dokumentationsseite der Methode .Lesen Sie immer, immer, immer die Dokumentation!
quelle
(char[])null
ist etwas besser, da es vermieden wird, ein neues Objekt zu erstellen. (Sie könnennull
mit keiner deroptions
Überladungen verwenden).null
, müssen Sie noch die angebenStringSplitOption.RemoveEmptyEntries
oder werden sie standardmäßig ignoriert?Ja, hier ist noch eine Antwort erforderlich!
Alle bisherigen Lösungen befassen sich mit dem eher begrenzten Bereich der kanonischen Eingabe : einem einzelnen Leerzeichen zwischen den Elementen (obwohl @cherno die Spitze des Hutes ist, um zumindest das Problem zu erwähnen). Aber ich vor , dass in allen , aber die dunkelsten Szenarien, Splitting alle diese sollten identische Ergebnisse liefern:
String.Split
(in einer der in den anderen Antworten hier gezeigten Geschmacksrichtungen) funktioniert einfach nicht gut, es sei denn, Sie fügen dieRemoveEmptyEntries
Option mit einer der folgenden Optionen hinzu:Wie die Abbildung zeigt, führt das Weglassen der Option zu vier verschiedenen Ergebnissen (mit A, B, C und D bezeichnet) im Vergleich zum Einzelergebnis aller vier Eingaben, wenn Sie Folgendes verwenden
RemoveEmptyEntries
:Wenn Sie keine Optionen verwenden möchten, verwenden Sie einfach die Regex-Alternative :-)
quelle
CapitalizeEveryWord("This is line one.\n \nThis is line three.")
.Where(s => s != string.Empty)
dem Regex hinzugefügt haben . Da Sie\s+
(eine beliebige Anzahl von Leerzeichen) angeben, darf kein leeres Element dazwischen liegen.Laut Dokumentation :
Rufen Sie einfach
myStr.Split();
an. Sie müssen nichts übergeben, da das Trennzeichen einparams
Array ist.quelle
Warum benutzt du nicht?:
quelle
Beachten Sie, dass benachbarte Leerzeichen auch bei Verwendung NICHT als einzelnes Trennzeichen behandelt werden
String.Split(null)
. Wenn eines Ihrer Token durch mehrere Leerzeichen oder Tabulatoren getrennt ist, werden leere Zeichenfolgen in Ihrem Array zurückgegeben.Aus der Dokumentation:
quelle
Also nicht kopieren und einfügen! Extrahieren Sie eine Funktion zum Teilen und verwenden Sie sie erneut.
Die Wiederverwendung von Code ist dein Freund.
quelle
Warum machst du das nicht einfach so:
Es scheint, dass es
String.ToCharArray()
in .NET 4.0 eine Methode gibt !EDIT: Wie VMAtm hervorgehoben hat, existierte die Methode bereits in .NET 2.0!
quelle
Sie können verwenden
String teilen.
quelle
Kannst du es nicht inline machen?
Andernfalls könnten Sie, wenn Sie genau dies häufig tun, immer eine Konstante oder etwas erstellen, das dieses char-Array enthält.
Wie andere angemerkt haben, können Sie laut Dokumentation auch
null
ein leeres Array verwenden. Wenn Sie dies tun, werden automatisch Leerzeichen verwendet.quelle
Wenn das Wiederholen des gleichen Codes das Problem ist, schreiben Sie eine Erweiterungsmethode in die String-Klasse, die die Aufteilungslogik kapselt.
quelle
Sie können einfach tun:
MSDN enthält weitere Beispiele und Referenzen:
http://msdn.microsoft.com/en-us/library/b873y76a.aspx
quelle