C# 命令列參數解析成字串陣列
在C#中,經常需要將包含命令列參數的字串分割成字串陣列。本文探討了標準函數和建議方法來完成此任務。
一個重要的考慮因素是處理包含空格的雙引號字串。僅僅基於空格分割字串是不夠的,因為它會錯誤地分割雙引號字串。
標準函數
C# 沒有提供專門用於此目的的標準函數。可以使用自訂函數檢查每個字元來實現此功能。
建議方法
一種建議的方法是使用以下程式碼區塊:
<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">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); } 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">string[] parameterArray = SplitCommandLine(parameterString).ToArray();</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(); foreach (string parameter in parameterArray) { Console.WriteLine(parameter); }</code>
以上是如何在C#中高效地將命令列參數解析為字串數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!