Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Memisahkan Rentetan Baris Perintah ke Array Rentetan dalam C#?

Bagaimana untuk Memisahkan Rentetan Baris Perintah ke Array Rentetan dalam C#?

Barbara Streisand
Barbara Streisandasal
2025-01-15 12:02:43494semak imbas

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

Rentetan parameter baris arahan C# dibahagikan kepada tatasusunan rentetan

Artikel ini bertujuan untuk menyelesaikan masalah pemisahan rentetan tunggal yang mengandungi parameter baris arahan ke dalam tatasusunan rentetan, seperti yang dilakukan oleh C# apabila menentukan parameter ini pada baris arahan.

Mengapa anda memerlukan fungsi tersuai?

Malangnya, C# tidak mempunyai fungsi terbina dalam untuk memisahkan rentetan berdasarkan keadaan aksara tertentu. Ini sesuai untuk tugasan ini kerana kami ingin membahagikan berdasarkan ruang kosong, dengan mengambil kira rentetan yang dipetik.

Skema ungkapan biasa

Seseorang mungkin mencadangkan menggunakan ungkapan biasa (regex) untuk mencapai ini. Walau bagaimanapun, ungkapan biasa boleh menjadi rumit dan sukar untuk dikekalkan, terutamanya apabila ia berkaitan dengan pengendalian rentetan petikan dengan betul.

Fungsi pembahagian tersuai

Untuk mengatasi had ini, kami akan mencipta fungsi Split tersuai kami sendiri:

<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>

Fungsi ini mengambil predikat sebagai hujah untuk menentukan sama ada watak harus membelah rentetan.

Pemprosesan tanda petikan

Untuk mengendalikan rentetan yang disebut, kami mentakrifkan kaedah sambungan 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>

Kaedah ini hanya mengalih keluar petikan sepadan yang muncul pada permulaan dan penghujung rentetan.

Gunakan dalam kombinasi

Menggabungkan teknik ini, kita boleh mencipta fungsi untuk memisahkan rentetan baris arahan:

<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>

Fungsi ini memisahkan rentetan berdasarkan ruang, mengabaikan ruang dalam rentetan yang disebut. Ia kemudian memangkas setiap hujah, mengalih keluar petikan di sekeliling jika ada.

Contoh penggunaan

Untuk menggunakan fungsi ini:

<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 akan mengandungi tatasusunan jangkaan parameter rentetan sepadan dengan rentetan baris arahan.

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Rentetan Baris Perintah ke Array Rentetan dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn