Memisahkan string menjadi substring di C#

Tip

Artikel ini adalah bagian dari bagian Dasar-Dasar untuk pengembang yang sudah mengetahui setidaknya satu bahasa pemrograman dan mempelajari C#. Jika Anda baru menggunakan pemrograman, mulailah dengan tutorial Memulai terlebih dahulu.

Berasal dari bahasa lain?string.Split adalah padanan C# untuk String.split di Java dan String.prototype.split di JavaScript. Tidak seperti bahasa tersebut, C# mengembalikan array (string[]), bukan daftar, dan argumen pemisah adalah karakter atau string, bukan ekspresi reguler. Untuk pemisahan berbasis pola, lihat Regex.Split.

Metode ini String.Split memecah string menjadi array substring menggunakan satu atau beberapa pemisah. Ini adalah cara paling sederhana untuk mengurai teks yang dibatasi seperti kata, nilai gaya CSV, atau token protokol.

Metode ini memiliki banyak kelebihan beban, tetapi mencakup empat keputusan independen:

  • Pemisah: satu char, larik berisi char, satu string, atau larik berisi string.
  • Jumlah hasil maksimum: batas jumlah substring yang dikembalikan.
  • Penanganan entri kosong: pertahankan substring kosong (bawaan) atau hapus dengan StringSplitOptions.RemoveEmptyEntries.
  • Penanganan spasi kosong: pangkas spasi putih di depan dan di belakang dari setiap entri dengan StringSplitOptions.TrimEntries.

Memisahkan string menjadi kata-kata

Untuk memisahkan frasa berdasarkan karakter spasi, berikan ' ' sebagai pemisah:

string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');

foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}
// => <The>
// => <quick>
// => <brown>
// => <fox>
// => <jumps>
// => <over>
// => <the>
// => <lazy>
// => <dog.>

Lakukan iterasi pada array yang dikembalikan dengan for untuk mendapatkan kembali posisi setiap kata:

string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');

for (int i = 0; i < words.Length; i++)
{
    Console.WriteLine($"Index {i}: <{words[i]}>");
}
// => Index 0: <The>
// => Index 1: <quick>
// => Index 2: <brown>
// => ...

Jika masukan berisi kemunculan berulang dari karakter pemisah, Split akan menghasilkan entri kosong, satu untuk setiap "celah" di antara pemisah yang berurutan:

string phrase = "The quick brown    fox     jumps over the lazy dog.";
string[] words = phrase.Split(' ');

foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}
// The runs of spaces produce empty entries:
// => <The>
// => <quick>
// => <brown>
// => <>
// => <>
// => <>
// => <fox>
// => ...

Berikan StringSplitOptions.RemoveEmptyEntries untuk menghilangkan entri kosong tersebut, sebagaimana ditunjukkan nanti dalam artikel ini.

Pisahkan berdasarkan beberapa karakter pemisah

Ketika lebih dari satu karakter dapat berfungsi sebagai pemisah, berikan karakter-karakter tersebut sebagai array. Contoh berikut memperlakukan spasi, koma, titik, titik dua, dan tab semuanya sebagai batas kata:

char[] delimiters = [' ', ',', '.', ':', '\t'];

string text = "one\ttwo three:four,five six seven";
Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(delimiters);
Console.WriteLine($"{words.Length} words in text:");

foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}
// => 7 words in text:
// => <one>
// => <two>
// => <three>
// => <four>
// => <five>
// => <six>
// => <seven>

Pemisah yang berdekatan masih menghasilkan entri kosong:

char[] delimiters = [' ', ',', '.', ':', '\t'];

string text = "one\ttwo :,five six seven";
Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(delimiters);
Console.WriteLine($"{words.Length} words in text:");

foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}
// => 7 words in text:
// => <one>
// => <two>
// => <>
// => <>
// => <five>
// => <six>
// => <seven>

Pisahkan berdasarkan pemisah multikarakter

Untuk memisahkan berdasarkan pemisah berupa kata utuh atau multikarakter, berikan array string. Overload string-array memerlukan sebuah nilai StringSplitOptions. Gunakan RemoveEmptyEntries saat pemisah berulang akan menghasilkan hasil kosong:

string[] separators = ["<<", "..."];

string text = "one<<two......three<four";
Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(separators, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine($"{words.Length} substrings in text:");

foreach (var word in words)
{
    Console.WriteLine(word);
}
// => 3 substrings in text:
// => one
// => two
// => three<four

Batasi berapa banyak substring yang Anda dapatkan kembali

Berikan argumen count untuk membatasi jumlah hasil. Entri terakhir berisi semua yang tersisa, termasuk pemisah yang masih tersisa:

string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ', 4, StringSplitOptions.None);

foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}
// => <The>
// => <quick>
// => <brown>
// => <fox jumps over the lazy dog.>

Pola ini berguna untuk key=value pasangan dan format lain di mana hanya pemisah pertama yang bermakna.

Memangkas spasi kosong dari setiap entri

StringSplitOptions.TrimEntries menghapus spasi kosong di awal dan akhir dari setiap substring yang dikembalikan. Anda dapat menggabungkannya dengan RemoveEmptyEntries untuk pembersihan gaya CSV yang khas:

string numerals = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10";
string[] trimmed = numerals.Split(',', StringSplitOptions.TrimEntries);

Console.WriteLine("Trimmed entries:");
foreach (var word in trimmed)
{
    Console.WriteLine($"<{word}>");
}

string[] untrimmed = numerals.Split(',', StringSplitOptions.None);
Console.WriteLine("Untrimmed entries:");
foreach (var word in untrimmed)
{
    Console.WriteLine($"<{word}>");
}
// => Trimmed entries: <1> <2> ... <10>
// => Untrimmed entries: <1> < 2> ... < 10>

Menggunakan ekspresi reguler

Split bekerja dengan baik untuk pemisah karakter tetap atau string. Untuk pemisahan berbasis pola, gunakan Regex.Split. Untuk pengenalan ekspresi reguler pada string, lihat Operasi string.

Baca juga