Bagikan melalui


Cara mencari string

Anda dapat menggunakan dua strategi utama untuk mencari teks dalam string. Metode dari kelas String mencari teks tertentu. Ekspresi reguler mencari pola dalam teks.

Jenis string , yang merupakan alias untuk System.String kelas , menyediakan banyak metode yang berguna untuk mencari konten string. Di antaranya adalah Contains, , StartsWithEndsWith, IndexOf, LastIndexOf. Kelas ini System.Text.RegularExpressions.Regex menyediakan kosakata yang kaya untuk mencari pola dalam teks. Dalam artikel ini, Anda mempelajari 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");
// Raw string literals can work here because the output doesn't begin with "
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 poin penting untuk menggunakan metode ini. Pencarian sensitif terhadap huruf besar/kecil secara default. Anda menggunakan StringComparison.CurrentCultureIgnoreCase nilai enumerasi untuk menentukan pencarian tanpa membedakan huruf besar/kecil.

Di mana letak teks yang dicari dalam string?

Metode IndexOf dan LastIndexOf juga mencari teks dalam string. Metode ini mengembalikan lokasi teks yang sedang dicari. Jika teks tidak ditemukan, mereka 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 ekspresi reguler

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 "mereka" dalam kalimat, mengabaikan kasus. Metode statis Regex.IsMatch melakukan pencarian. Anda memberinya string yang akan dicari serta pola pencarian. Dalam konteks ini, argumen ketiga menentukan pencarian yang tidak case-sensitive. Untuk informasi selengkapnya, lihat System.Text.RegularExpressions.RegexOptions .

Pola pencarian menjelaskan teks yang Anda cari. Tabel berikut ini menjelaskan setiap elemen pola pencarian. (Tabel berikut menggunakan satu \, yang harus di-escape sebagai \\ dalam karakter string C#).

Pola Meaning
the cocok dengan teks "the"
(eir)? cocok dengan 0 atau 1 kemunculan "eir"
\s sesuaikan dengan karakter spasi putih
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();
    }
}

Petunjuk / Saran

Metode-metode string umumnya merupakan pilihan yang lebih baik ketika Anda mencari string yang tepat. Ekspresi reguler 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 diformat sebagai nomor telepon: tiga grup digit yang dipisahkan oleh tanda hubung di mana dua grup pertama berisi tiga digit dan grup ketiga berisi empat digit. Pola pencarian menggunakan ekspresi ^\\d{3}-\\d{3}-\\d{4}$reguler . Untuk informasi selengkapnya, lihat Bahasa Ekspresi Reguler - Referensi Cepat.

Pola Meaning
^ Sesuai dengan awal string
\d{3} Cocok persis dengan tiga karakter digit
- Cocok dengan karakter '-'
\d{4} Mencocokkan tepat empat karakter angka
$ Mencocokkan 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. Ekspresi reguler lebih baik mencari atau memvalidasi terhadap pola, daripada string teks tunggal.

Lihat juga