首頁 > 後端開發 > C++ > 如何在 C# 中將命令列字串拆分為字串數組?

如何在 C# 中將命令列字串拆分為字串數組?

Barbara Streisand
發布: 2025-01-15 12:02:43
原創
496 人瀏覽過

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

C# 命令列參數字串分割成字串陣列

本文旨在解決將包含命令列參數的單一字串分割成字串陣列的問題,如 C# 在命令列指定這些參數時一樣。

為何需要自訂函數?

不幸的是,C# 沒有內建函數可以根據特定字元條件分割字串。這對於此任務來說是理想的,因為我們希望基於空格進行分割,同時考慮帶有引號的字串。

正規表示式方案

有人可能會建議使用正規表示式 (regex) 來實現這一點。但是,正規表示式可能很複雜且難以維護,尤其是在正確處理帶引號的字串方面。

自訂分割函數

為了克服這個限制,我們將創建我們自己的自訂 Split 函數:

<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>
登入後複製

此函數採用謂詞作為參數,以確定字元是否應分割字串。

引號處理

為了處理引號的字串,我們定義了一個 TrimMatchingQuotes 擴充方法:

<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>
登入後複製

此方法僅刪除出現在字串開頭和結尾的匹配引號。

組合使用

結合這些技術,我們可以建立一個函數來分割命令列字串:

<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>
登入後複製

此函數基於空格分割字串,忽略帶引號字串中的空格。然後,它修剪每個參數,並刪除周圍的引號(如果存在)。

範例用法

要使用此函數:

<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 將包含與命令列字串對應的預期字串參數陣列。

以上是如何在 C# 中將命令列字串拆分為字串數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板