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
Freigeben: 2025-01-15 12:02:43
Original
496 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage