Heim >Backend-Entwicklung >C++ >Wie teile ich einen Befehlszeilen-String in ein String-Array in C# auf?

Wie teile ich einen Befehlszeilen-String in ein String-Array in C# auf?

Barbara Streisand
Barbara StreisandOriginal
2025-01-15 12:02:43495Durchsuche

How to Split a Command-Line String into a String Array in C#?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn