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 중국어 웹사이트의 기타 관련 기사를 참조하세요!