C'de arama dizeleri#

İpucu

Bu makale, en az bir programlama dili bilen ve C# dilini öğrenen geliştiriciler için Temel Bilgiler bölümünün bir parçasıdır. Programlamaya yeni başladıysanız ilk olarak Başlangıç öğreticileri ile başlayın.

Başka bir dilden mi geliyorsunuz? C# string yöntemleri; Contains, StartsWith ve IndexOf, Java'daki String ve JavaScript'teki String.prototype içindeki paralel yöntemlere karşılık gelir. Temel fark, bazı C# aramalarının varsayılan olarak ordinal, büyük/küçük harfe duyarlı karşılaştırmayı kullanmasıdır. Diğerleri varsayılan olarak geçerli kültürün semantiğini kullanır. Kullanıcıya yönelik aramalar için bir StringComparison değer geçirmek isteyebilirsiniz.

sınıfı, String gündelik iki soruyu yanıtlayan yöntemler içerir:

Normal ifadeler kullanılarak daha karmaşık arama ve değiştirme algoritmaları oluşturulabilir. Normal ifadeler ve diğer dize işlemleri hakkında daha fazla bilgi için Dize işlemleri hakkındaki dil başvurusu makalesine bakın.

Dizenin metin içerip içermediğini denetleme

Bir alt dizenin varlığını test etmek için , Containsveya StartsWith kullanınEndsWith:

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

Bu yöntemler varsayılan olarak büyük/küçük harfe duyarlı, sıralı karşılaştırma kullanır. Kullanıcı girişini kabul etmek veya görüntüleme metni için büyük/küçük harf duyarlılığını göz ardı etmek için, StringComparison.CurrentCultureIgnoreCase ya da StringComparison.OrdinalIgnoreCase gibi bir StringComparison değeri geçirin.

Tek bir karakter aradığınızda, Contains öğesinin char aşırı yüklemesini kullanın. Tek karakterli bir dize ayırmayı önler ve daha doğrudandır:

string path = "/usr/local/bin";
bool hasSlash = path.Contains('/');
Console.WriteLine($"Path contains '/': {hasSlash}");
// => Path contains '/': True

Metnin konumunu bulma

IndexOf bir alt dizenin (veya karakterin) ilk oluşumunun sıfır tabanlı dizinini döndürür ve LastIndexOf son oluşumun dizinini döndürür. Her ikisi de arama metni olmadığında geri döner -1 . İki işaretçi arasındaki metni ayıklamak için bunları birleştirin:

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 '

İlk veya son yerine her oluşuma ihtiyacınız olduğunda, önceki sonucun yanı sıra bağımsız değişken olarak startIndex bir tane geçirerek veya normal ifadeye geçerek yineleyebilirsiniz.

Doğru karşılaştırmayı seçin

Çoğu arama aşırı yüklemesi isteğe bağlı StringComparison bir değeri kabul eder. Aradığınız veri türüne göre seçin:

  • Tanımlayıcıları, dosya yollarını, protokol belirteçlerini veya makine tanımlı başka bir öğeyi arıyorsanız kullanın Ordinal.
  • Aynı türde makine tanımlı veriler arıyor, ancak büyük/küçük harf duyarsız arama yapmak istiyorsanız OrdinalIgnoreCase kullanın.
  • Kullanıcıya görünen metinde mevcut yerel ayarın kuralları geçerli olacak şekilde arama yapıyorsanız, CurrentCulture kullanın.
  • Aynı kullanıcıya görünen metni arıyorsanız ve büyük/küçük harf farkını göz ardı etmek istiyorsanız CurrentCultureIgnoreCase kullanın.
  • Her makinede ve kültürde aynı şekilde karşılaştırılması gereken kalıcı olarak depolanan verilerde arama yapıyorsanız InvariantCulture kullanın (buna nadiren ihtiyaç duyulur).

Sıralı karşılaştırma, doğal dil metni olmayan her şey için en hızlı seçenek ve doğru varsayılan seçenektir. Kültüre duyarlı karşılaştırma önemli ölçüde daha yavaştır ve şaşırtıcı sonuçlara neden olabilir. Örneğin, bazı kültürlerde küçük i, büyük I ile eşleşmez. Bunu yalnızca kullanıcıların düzyazı metinlerde yaptığı aramalar için kullanın.

Kültüre duyarlı karşılaştırmanın ayrıntılı bir şekilde işlenmesi için bkz. Dizeleri karşılaştırmak için en iyi yöntemler.

Ayrıca bakınız