首页 >后端开发 >C++ >如何在 C# 中将命令行字符串拆分为字符串数组?

如何在 C# 中将命令行字符串拆分为字符串数组?

Barbara Streisand
Barbara Streisand原创
2025-01-15 12:02:43495浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn