Heim >Backend-Entwicklung >C++ >Wie teile ich einen Befehlszeilen-String in ein String-Array in C# auf?
Die Zeichenfolge des C#-Befehlszeilenparameters wird in ein Zeichenfolgenarray aufgeteilt
Dieser Artikel zielt darauf ab, das Problem der Aufteilung einer einzelnen Zeichenfolge mit Befehlszeilenparametern in ein Array von Zeichenfolgen zu lösen, wie dies bei C# bei der Angabe dieser Parameter in der Befehlszeile der Fall ist.
Warum benötigen Sie eine benutzerdefinierte Funktion?
Leider verfügt C# über keine integrierte Funktion zum Aufteilen von Zeichenfolgen basierend auf bestimmten Zeichenbedingungen. Dies ist ideal für diese Aufgabe, da wir eine Aufteilung basierend auf Leerzeichen und unter Berücksichtigung von Zeichenfolgen in Anführungszeichen vornehmen möchten.
Reguläres Ausdrucksschema
Jemand könnte vorschlagen, reguläre Ausdrücke (Regex) zu verwenden, um dies zu erreichen. Allerdings können reguläre Ausdrücke komplex und schwierig zu pflegen sein, insbesondere wenn es um die korrekte Handhabung von Zeichenfolgen in Anführungszeichen geht.
Benutzerdefinierte Segmentierungsfunktion
Um diese Einschränkung zu überwinden, erstellen wir unsere eigene benutzerdefinierte Split-Funktion:
<code class="language-csharp">public static IEnumerable<string> Split(this string str, Func<char, bool> controller) { int nextPiece = 0; for (int c = 0; c < str.Length; c++) { if (controller(str[c])) { yield return str.Substring(nextPiece, c - nextPiece); nextPiece = c + 1; } } yield return str.Substring(nextPiece); }</code>
Diese Funktion verwendet ein Prädikat als Argument, um zu bestimmen, ob das Zeichen die Zeichenfolge teilen soll.
Anführungszeichenverarbeitung
Um Zeichenfolgen in Anführungszeichen zu verarbeiten, definieren wir eine TrimMatchingQuotes-Erweiterungsmethode:
<code class="language-csharp">public static string TrimMatchingQuotes(this string input, char quote) { if ((input.Length >= 2) && (input[0] == quote) && (input[input.Length - 1] == quote)) return input.Substring(1, input.Length - 2); return input; }</code>
Diese Methode entfernt nur übereinstimmende Anführungszeichen, die am Anfang und Ende der Zeichenfolge stehen.
In Kombination verwenden
Durch die Kombination dieser Techniken können wir eine Funktion zum Teilen von Befehlszeilenzeichenfolgen erstellen:
<code class="language-csharp">public static IEnumerable<string> SplitCommandLine(string commandLine) { bool inQuotes = false; return commandLine.Split(c => { if (c == '\"') inQuotes = !inQuotes; return !inQuotes && c == ' '; }) .Select(arg => arg.Trim().TrimMatchingQuotes('\"')) .Where(arg => !string.IsNullOrEmpty(arg)); }</code>
Diese Funktion teilt eine Zeichenfolge basierend auf Leerzeichen auf und ignoriert Leerzeichen in Zeichenfolgen in Anführungszeichen. Anschließend wird jedes Argument gekürzt und die umgebenden Anführungszeichen, falls vorhanden, entfernt.
Beispielverwendung
Um diese Funktion zu verwenden:
<code class="language-csharp">string parameterString = @"/src:""C:\tmp\Some Folder\Sub Folder"" /users:""[email protected]"" tasks:""SomeTask,Some Other Task"" -someParam foo"; string[] parameterArray = SplitCommandLine(parameterString).ToArray();</code>
parameterArray enthält das erwartete Array von Zeichenfolgenparametern, die der Befehlszeilenzeichenfolge entsprechen.
Das obige ist der detaillierte Inhalt vonWie teile ich einen Befehlszeilen-String in ein String-Array in C# auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!