Mengurai String Nomor Halaman di C#: Panduan Komprehensif

Saat bekerja dengan aplikasi perangkat lunak, terutama yang melibatkan pencetakan atau konten yang dipaginasikan, Anda mungkin menghadapi kebutuhan untuk mengurai nomor halaman dari input pengguna. Format input yang umum bisa berupa campuran nomor halaman yang dipisahkan dengan koma dan dash, seperti “1,3,5-10,12”. Tantangannya muncul ketika mencoba mengubah string ini menjadi daftar nomor halaman individu, yang banyak pengembang lebih suka ditangani secara otomatis daripada membuat solusi kustom dari awal.

Masalah: Mengurai String Nomor Halaman

Anda mungkin bertanya: Apakah C# memiliki dukungan bawaan untuk mengurai string nomor halaman? Jawabannya adalah meskipun C# tidak memiliki fungsi bawaan khusus untuk tugas ini, ia memberikan alat yang memungkinkan kita untuk membuat solusi yang efisien. Tujuan keseluruhannya adalah untuk mengambil string nomor halaman dan mengeluarkan daftar lengkap dari nomor-nomor individu tersebut, memperluas rentang yang ditunjukkan oleh dash (misalnya, “5-10” harus diperluas menjadi “5,6,7,8,9,10”).

Solusi: Mengimplementasikan Parser Kustom

Rincian Langkah demi Langkah

Untuk mencapai tujuan kami, kami dapat menggunakan kombinasi manipulasi string dan koleksi C#. Ikhtisar di bawah ini menggambarkan prosesnya:

  1. Pemisahan String: Mulai dengan memisahkan string input pada setiap koma untuk memecahnya menjadi komponen individu. Setiap komponen bisa berupa satu angka atau rentang angka.
  2. Mengurai Angka: Gunakan int.TryParse() untuk menentukan apakah segmen tersebut adalah sebuah bilangan bulat tunggal.
  3. Menangani Rentang: Jika segmen mencakup dash (misalnya, “5-10”), pisahkan segmen lebih lanjut untuk mengekstrak angka awal dan akhir. Validasi bahwa angka awal kurang dari atau sama dengan angka akhir.
  4. Menghasilkan Rentang: Gunakan metode Enumerable.Range() untuk menghasilkan semua nilai integer dalam rentang yang ditentukan.
  5. Menghasilkan Hasil: Terakhir, hasilkan semua angka yang diurai kembali ke pemanggil untuk digunakan lebih lanjut.

Contoh Kode

Berikut adalah implementasi sampel yang mencakup logika di atas dalam C#:

foreach (string s in "1,3,5-10,12".Split(',')) 
{
    // Cobalah untuk mengurai nomor halaman individu
    int num;
    if (int.TryParse(s, out num)) 
    {
        yield return num; // Hasilkan nomor tunggal
        continue; // Lewati ke iterasi berikutnya
    }

    // Jika tidak, tangani rentang
    string[] subs = s.Split('-');
    int start, end;

    // Parse awal dan akhir untuk rentang
    if (subs.Length > 1 &&
        int.TryParse(subs[0], out start) &&
        int.TryParse(subs[1], out end) && 
        end >= start) 
    {
        // Buat rentang angka dari awal ke akhir
        int rangeLength = end - start + 1;
        foreach (int i in Enumerable.Range(start, rangeLength)) 
        {
            yield return i; // Hasilkan setiap angka dalam rentang
        }
    }
}

Penjelasan Kode

  • Pemisahan Input: Kami menggunakan metode .Split(',') untuk memecah string input menjadi bagian-bagian yang lebih mudah dikelola.
  • Mengurai Angka: Penggunaan int.TryParse() memungkinkan kami untuk memeriksa dengan aman apakah segmen string dapat diubah menjadi integer tanpa melempar pengecualian.
  • Menangani Rentang: Untuk segmen yang mengandung dash, kami memvalidasi dan memisahkan mereka untuk mengekstrak titik awal dan akhir.
  • Menghasilkan Nilai: Pernyataan yield memungkinkan metode untuk mengembalikan nilai satu per satu, membuatnya lebih efisien untuk panggilan ke parser.

Kesimpulan

Mengurai string nomor halaman di C# mungkin terlihat menakutkan pada awalnya, tetapi dengan pendekatan yang tepat, hal ini dapat dibuat sederhana dan efisien. Dengan memanfaatkan manipulasi string dan konstruksi dasar C#, Anda dapat menangani berbagai format input tanpa harus menciptakan kembali roda. Metode ini memungkinkan Anda untuk dengan mudah memperluas dan menyesuaikan solusi Anda untuk kasus yang lebih kompleks seandainya dibutuhkan.

Untuk merangkum, alih-alih mencari fitur bawaan, Anda dapat dengan percaya diri membuat fungsi kustom yang memenuhi kebutuhan Anda—membuat kode Anda lebih bersih dan proses pengembangan Anda lebih lancar.

Silakan sesuaikan pendekatan ini untuk proyek Anda dan bagikan pengalaman Anda di kolom komentar di bawah!