Cara mencari string
Anda dapat menggunakan dua strategi utama untuk mencari teks dalam string. MetodeString kelas mencari teks tertentu. Ekspresi reguler mencari pola dalam teks.
Catatan
Contoh C# dalam artikel ini dijalankan di Try.NET pelari kode sebaris dan taman bermain. Pilih tombol Jalankan untuk menjalankan contoh di jendela interaktif. Setelah Anda menjalankan kode, Anda dapat memodifikasinya dan menjalankan kode yang dimodifikasi dengan memilih Jalankan lagi. Kode yang dimodifikasi berjalan di jendela interaktif atau, jika kompilasi gagal, jendela interaktif menampilkan semua pesan kesalahan pengompilasi C#.
Jenis string, yang merupakan alias untuk System.String kelas, menyediakan sejumlah metode yang berguna untuk mencari konten string. Di antaranya adalah Contains, StartsWith, EndsWith, IndexOf, LastIndexOf. Kelas ini System.Text.RegularExpressions.Regex menyediakan kosakata yang kaya untuk mencari pola dalam teks. Dalam artikel ini, Anda mempelajari teknik-teknik ini dan cara memilih metode terbaik untuk kebutuhan Anda.
Apakah string berisi teks?
Metode String.Contains, String.StartsWith, dan String.EndsWith mencari string untuk teks tertentu. Contoh berikut menunjukkan masing-masing metode ini dan variasi yang menggunakan pencarian yang tidak peka huruf besar/kecil:
string factMessage = "Extension methods have all the capabilities of regular static methods.";
// Write the string and include the quotation marks.
Console.WriteLine($"\"{factMessage}\"");
// Simple comparisons are always case sensitive!
bool containsSearchResult = factMessage.Contains("extension");
Console.WriteLine($"Contains \"extension\"? {containsSearchResult}");
// For user input and strings that will be displayed to the end user,
// use the StringComparison parameter on methods that have it to specify how to match strings.
bool ignoreCaseSearchResult = factMessage.StartsWith("extension", System.StringComparison.CurrentCultureIgnoreCase);
Console.WriteLine($"Starts with \"extension\"? {ignoreCaseSearchResult} (ignoring case)");
bool endsWithSearchResult = factMessage.EndsWith(".", System.StringComparison.CurrentCultureIgnoreCase);
Console.WriteLine($"Ends with '.'? {endsWithSearchResult}");
Contoh sebelumnya menunjukkan titik penting untuk menggunakan metode ini. Pencarian peka huruf besar/kecil secara default. Anda menggunakan StringComparison.CurrentCultureIgnoreCase nilai enumerasi untuk menentukan pencarian yang tidak peka huruf besar/kecil.
Di mana teks yang dicari muncul dalam string?
Metode IndexOf dan LastIndexOf juga mencari teks dalam string. Metode ini mengembalikan lokasi teks yang dicari. Jika teks tidak ditemukan, teks akan mengembalikan -1
. Contoh berikut menunjukkan pencarian untuk kemunculan pertama dan terakhir kata "metode" dan menampilkan teks di antaranya.
string factMessage = "Extension methods have all the capabilities of regular static methods.";
// Write the string and include the quotation marks.
Console.WriteLine($"\"{factMessage}\"");
// This search returns the substring between two strings, so
// the first index is moved to the character just after the first string.
int first = factMessage.IndexOf("methods") + "methods".Length;
int last = factMessage.LastIndexOf("methods");
string str2 = factMessage.Substring(first, last - first);
Console.WriteLine($"Substring between \"methods\" and \"methods\": '{str2}'");
Menemukan teks tertentu menggunakan regex
Kelas System.Text.RegularExpressions.Regex dapat digunakan untuk mencari string. Pencarian ini dapat berkisar dalam kompleksitas dari pola teks yang sederhana hingga rumit.
Contoh kode berikut mencari kata "the" atau "their" dalam kalimat, mengabaikan kasus. Metode statis Regex.IsMatch melakukan pencarian. Anda memberinya string untuk mencari dan pola pencarian. Dalam hal ini, argumen ketiga menentukan pencarian yang tidak peka huruf besar/kecil. Untuk informasi selengkapnya, lihat System.Text.RegularExpressions.RegexOptions .
Pola pencarian menjelaskan teks yang Anda cari. Tabel berikut ini menjelaskan setiap elemen pola pencarian. (Tabel di bawah ini menggunakan satu \
, yang harus diloloskan seperti \\
dalam string C#).
Pola | Makna |
---|---|
the |
cocok dengan teks "the" |
(eir)? |
cocok dengan 0 atau 1 kemunculan "eir" |
\s |
Cocokkan karakter spasi kosong |
string[] sentences =
{
"Put the water over there.",
"They're quite thirsty.",
"Their water bottles broke."
};
string sPattern = "the(ir)?\\s";
foreach (string s in sentences)
{
Console.Write($"{s,24}");
if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
{
Console.WriteLine($" (match for '{sPattern}' found)");
}
else
{
Console.WriteLine();
}
}
Tip
Metode string
biasanya merupakan pilihan yang lebih baik ketika Anda mencari string yang tepat. Regex lebih baik saat Anda mencari beberapa pola dalam string sumber.
Apakah string mengikuti pola?
Kode berikut menggunakan ekspresi reguler untuk memvalidasi format setiap string dalam array. Validasi mengharuskan setiap string memiliki bentuk nomor telepon di mana tiga grup digit dipisahkan oleh tanda hubung, dua grup pertama berisi tiga digit, dan grup ketiga berisi empat digit. Pola pencarian menggunakan ^\\d{3}-\\d{3}-\\d{4}$
regex. Untuk informasi selengkapnya, lihat Bahasa Regex - Referensi Cepat.
Pola | Makna |
---|---|
^ |
cocok dengan awal string |
\d{3} |
cocok persis dengan 3 karakter digit |
- |
cocok dengan karakter '-' |
\d{4} |
cocok persis dengan 4 karakter digit |
$ |
cocok dengan akhir string |
string[] numbers =
{
"123-555-0190",
"444-234-22450",
"690-555-0178",
"146-893-232",
"146-555-0122",
"4007-555-0111",
"407-555-0111",
"407-2-5555",
"407-555-8974",
"407-2ab-5555",
"690-555-8148",
"146-893-232-"
};
string sPattern = "^\\d{3}-\\d{3}-\\d{4}$";
foreach (string s in numbers)
{
Console.Write($"{s,14}");
if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern))
{
Console.WriteLine(" - valid");
}
else
{
Console.WriteLine(" - invalid");
}
}
Pola pencarian tunggal ini cocok dengan banyak string yang valid. Regex lebih baik mencari atau memvalidasi terhadap pola, daripada string teks tunggal.