ホームページ > バックエンド開発 > 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート