Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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? Metode C# string seperti Contains, StartsWith, dan IndexOf setara dengan metode paralel di String Java dan String.prototype JavaScript. Perbedaan utamanya adalah beberapa pencarian C# secara default menggunakan perbandingan ordinal dan peka huruf besar/kecil. Lainnya default ke semantik budaya saat ini. Untuk pencarian yang ditampilkan kepada pengguna, Anda mungkin ingin meneruskan nilai StringComparison.
Kelas String mencakup metode yang menjawab dua pertanyaan umum sehari-hari:
- Apakah string ini berisi teks tersebut? — gunakan Contains, StartsWith, atau EndsWith.
- Di mana teks itu terjadi? — gunakan IndexOf atau LastIndexOf.
Algoritma pencarian dan penggantian yang lebih kompleks dapat dibangun menggunakan ekspresi reguler. Untuk informasi selengkapnya tentang ekspresi reguler dan operasi string lainnya, lihat artikel referensi bahasa pada operasi String.
Periksa apakah string berisi teks
Gunakan Contains, StartsWith, atau EndsWith untuk menguji keberadaan substring:
string factMessage = "Extension methods have all the capabilities of regular static methods.";
// Write the string and include the quotation marks.
Console.WriteLine($"\"{factMessage}\"");
// Default comparisons are case sensitive.
bool containsSearchResult = factMessage.Contains("extension");
Console.WriteLine($"""Contains "extension"? {containsSearchResult}""");
// For user-facing searches, pass a StringComparison value to control case and culture.
bool ignoreCaseSearchResult = factMessage.StartsWith("extension", StringComparison.CurrentCultureIgnoreCase);
Console.WriteLine($"""Starts with "extension"? {ignoreCaseSearchResult} (ignoring case)""");
bool endsWithSearchResult = factMessage.EndsWith(".", StringComparison.Ordinal);
Console.WriteLine($"Ends with '.'? {endsWithSearchResult}");
// => "Extension methods have all the capabilities of regular static methods."
// => Contains "extension"? False
// => Starts with "extension"? True (ignoring case)
// => Ends with '.'? True
Metode ini secara default menggunakan perbandingan ordinal yang peka terhadap huruf besar/kecil. Untuk menerima input pengguna atau mengabaikan huruf besar/kecil untuk teks tampilan, berikan StringComparison nilai seperti StringComparison.CurrentCultureIgnoreCase atau StringComparison.OrdinalIgnoreCase.
Saat Anda mencari satu karakter, gunakan overload Contains dari char. Ini menghindari alokasi string satu karakter dan lebih langsung:
string path = "/usr/local/bin";
bool hasSlash = path.Contains('/');
Console.WriteLine($"Path contains '/': {hasSlash}");
// => Path contains '/': True
Temukan posisi teks
IndexOf mengembalikan indeks berbasis nol dari kemunculan pertama substring (atau karakter), dan LastIndexOf mengembalikan indeks kemunculan terakhir. Keduanya mengembalikan -1 saat teks penelusuran tidak ditemukan. Gabungkan untuk mengekstrak teks di antara dua penanda:
string factMessage = "Extension methods have all the capabilities of regular static methods.";
Console.WriteLine($"\"{factMessage}\"");
// Extract the text between the first and last occurrence of "methods".
int first = factMessage.IndexOf("methods") + "methods".Length;
int last = factMessage.LastIndexOf("methods");
string between = factMessage.Substring(first, last - first);
Console.WriteLine($"""Substring between "methods" and "methods": '{between}'""");
// => "Extension methods have all the capabilities of regular static methods."
// => Substring between "methods" and "methods": ' have all the capabilities of regular static '
Saat Anda membutuhkan setiap kemunculan, bukan hanya yang pertama atau terakhir, lakukan iterasi dengan memberikan hasil sebelumnya ditambah satu sebagai argumen startIndex, atau beralihlah ke ekspresi reguler.
Pilih perbandingan yang tepat
Sebagian besar kelebihan beban pencarian menerima nilai opsional StringComparison . Pilih berdasarkan jenis data yang Anda cari:
- Jika Anda mencari pengidentifikasi, jalur file, token protokol, atau hal lain yang ditentukan mesin, gunakan Ordinal.
- Jika Anda mencari jenis data yang sama yang ditentukan oleh mesin, tetapi ingin tidak membedakan huruf besar/kecil, gunakan OrdinalIgnoreCase.
- Jika Anda mencari teks yang terlihat pengguna di mana aturan lokal saat ini harus diterapkan, gunakan CurrentCulture.
- Jika Anda menelusuri teks yang sama yang terlihat oleh pengguna dan ingin mengabaikan huruf besar/kecil, gunakan CurrentCultureIgnoreCase.
- Jika Anda mencari data persisten yang harus membandingkan hal yang sama pada setiap komputer dan budaya, gunakan InvariantCulture (jarang diperlukan).
Perbandingan ordinal adalah opsi tercepat dan default yang tepat untuk apa pun yang bukan teks bahasa alami. Perbandingan yang mempertimbangkan budaya jauh lebih lambat dan dapat memberikan hasil yang tidak terduga. Misalnya, dalam beberapa budaya, huruf kecil i tidak sesuai dengan huruf besar I. Gunakan itu hanya untuk pencarian yang dilakukan pengguna pada teks prosa.
Untuk pembahasan mendalam tentang perbandingan yang mempertimbangkan budaya, lihat Praktik terbaik untuk membandingkan string.