System.String'in onlarca metodu vardır. Bu sayfa, gerçek kodda işin çoğunu yapanları, önemli seçenekleri ve tuzaklarıyla ele alır. Hepsine tek bir kural uygulanır: string'ler değiştirilemez, bu yüzden her metot yeni bir string (ya da bir değer) döndürür ve orijinali değiştirmez. Kendi satırında s.Trim(); hiçbir şey yapmaz; s = s.Trim(); yazın.
Split
Split bir string'i her ayırıcıda bir string[]'e böler:
Çıktı:
3
apple
banana
cherry
red/green/ blue/yellow
INFO/started/ready
" blue"'ya dikkat edin: Split tam ayırıcıda keser ve boşlukları korur. İki seçenek yaygın temizlikleri halleder:
Çıktı:
5
4
c#|dotnet|linq
key=[Subject] value=[Re: Meeting: Friday]
3
RemoveEmptyEntries uzunluğu sıfır olan parçaları atar ama yalnızca boşluktan oluşan parçaları atmaz (yukarıda " " kaldı). .NET 5 StringSplitOptions.TrimEntries'i ekledi ve ikisi birleştirilebilir: tags.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries) temiz sonucu tek çağrıda verir. Ayırıcı olarak null vermek herhangi bir boşluk karakterinde böler; metni kelimelere ayırmanın olağan yolu budur.
Tek bir char ile bölmek (Split(',')) dizi gerektirmez. Bir char artı seçenekler ya da tek bir string alan overload'lar .NET Core 2.0'dan itibaren vardır; yukarıda kullanılan dizi biçimleri .NET Framework ve Unity dahil her yerde çalışır.
Replace
Replace bir karakterin ya da alt string'in her geçişini değiştirir:
Çıktı:
5551234567
555.123.4567
Cats and dogs and CATS
dogs and dogs and dogs
dogs and cats and CATS
too many spaces
StringComparison argümanlı overload .NET Core 2.0 ve sonrasında vardır. .NET Framework'te harf duyarsız değiştirme Regex.Replace(text, Regex.Escape(find), replacement, RegexOptions.IgnoreCase) ile yapılır. "" ile değiştirmek karakterleri silmenin yoludur ve birkaç değişiklik için birkaç Replace çağrısını zincirlemek sorun değildir.
Contains, IndexOf, StartsWith ve EndsWith
Bu metotlar arama yapar. Contains evet ya da hayır cevabı verir; IndexOf ve LastIndexOf bir konum ya da eşleşme yoksa -1 döndürür; StartsWith ve EndsWith uçları test eder.
Çıktı:
True
False
True
True
8
30
28
-1
16
False
True
True
Bunların hepsi varsayılan olarak büyük/küçük harfe duyarlıdır. Contains(string, StringComparison) .NET Core 2.1 ve sonrasında vardır; IndexOf(...) >= 0 biçimi her sürümde çalışır, eski kodda onu görmenizin nedeni budur. IndexOfAny(new[] { ',', ';' }) birkaç karakterden ilkini bulur.
Kültürle ilgili bir not: StringComparison olmadan StartsWith, EndsWith, IndexOf(string) ve CompareTo kültüre duyarlı kurallar kullanır; Contains, Replace ve IndexOf(char) ise ordinal karşılaştırır. StringComparison.Ordinal ya da OrdinalIgnoreCase'i açıkça vermek belirsizliği ortadan kaldırır ve kod analizörleri bunu önerir.
Trim, TrimStart ve TrimEnd
Trim iki uçtan boşluk karakterlerini (boşluklar, sekmeler, satır sonları) kaldırır. TrimStart ve TrimEnd tek uçtan kaldırır. Karakter verildiğinde bunun yerine o karakterleri kaldırırlar:
Çıktı:
[ana@example.com]
[ana@example.com \n]
[ x]
SALE
7
path/to/dir
1,234.50
Trim yalnızca uçlara dokunur; string'in içindeki boşluklar korunur. "000" üzerinde TrimStart('0') boş bir string döndürür, bu yüzden sayı string'lerini sıfırları elle soymak yerine int.Parse ile parse edin.
ToUpper ve ToLower
Çıktı:
MAYA LOPEZ
maya lopez
MAYA LOPEZ
Coffee
ToUpper ve ToLower geçerli kültürü izler, bu yüzden Türkçede "i".ToUpper() I değil, noktalı büyük İ'dir. Tanımlayıcılar, anahtarlar ve dosya adları için ToUpperInvariant ve ToLowerInvariant kullanın. Karşılaştırma için harf dönüştürmek yerine bir StringComparison kullanın (bkz. string'ler). Her kelimenin ilk harfini büyütmek için CultureInfo.CurrentCulture.TextInfo.ToTitleCase(text) vardır, ama zaten tamamen büyük harfli kelimelere dokunmaz.
PadLeft ve PadRight
Doldurma, string toplam bir genişliğe ulaşana kadar karakter ekler. Sabit genişlikli çıktı ve kodları sıfırla doldurmak için kullanışlıdır:
Çıktı:
000042
[Tea ]
[ Tea]
Too long already
Espresso.. 2.40
Latte..... 3.60
Mocha..... 3.95
Interpolation hizalaması ({name,-10}) aynı işi satır içinde yapar.
Join ve Concat
string.Join herhangi bir koleksiyonun elemanları arasına bir ayırıcı koyar. string.Concat ayırıcısız birleştirir:
Çıktı:
Ana, Ben, Chloe
1 + 2 + 3
True
2026-09
AnaBenChloe
Ana, Ben and Chloe
Ayırıcılı bir liste oluşturmanın doğru yolu Join'dir: silinecek sonda bir ayırıcı kalmaz ve sonucu tek geçişte oluşturur. Her elemanda ToString() çağırır, bu yüzden sayılar ve nesnelerle de çalışır.
Reverse, Insert ve Remove
String döndüren bir string.Reverse metodu yoktur. İki olağan yaklaşım:
Çıktı:
desserts
desserts
True
2026/Q3-09
Hello
HelloWorld
Tek başına word.Reverse() bir string değil IEnumerable<char> döndürür; onu yazdırmak bir tip adı gösterir. İki yöntem de UTF-16 kod birimlerini ters çevirir; bu da iki birimden oluşan karakterleri (çoğu emoji) ve birleşik aksanlı harfleri bozar.
Hızlı başvuru
| Görev | Metot |
|---|---|
| Parçalara bölmek | s.Split(','), s.Split(new[] {',', ';'}, StringSplitOptions.RemoveEmptyEntries) |
| Hepsini değiştirmek | s.Replace("a", "b") |
| İçeriyor mu | s.Contains("x"), s.Contains("x", StringComparison.OrdinalIgnoreCase) |
| Konum | s.IndexOf("x"), s.LastIndexOf('x') (yoksa -1) |
| İle başlıyor ya da bitiyor mu | s.StartsWith("x"), s.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase) |
| Uçlardaki boşlukları kaldırmak | s.Trim(), s.TrimStart(), s.TrimEnd() |
| Harf büyüklüğünü değiştirmek | s.ToUpper(), s.ToLowerInvariant() |
| Bir genişliğe doldurmak | s.PadLeft(6, '0'), s.PadRight(10) |
| Bir koleksiyonu birleştirmek | string.Join(", ", items) |
| String'in bir kısmı | s.Substring(start, length) |
| Eklemek ya da silmek | s.Insert(i, "x"), s.Remove(i, count) |
| Null ya da boş kontrolü | string.IsNullOrWhiteSpace(s) |
Sıkça Sorulan Sorular
C#'ta bir string nasıl bölünür?
text.Split(',') virgüller arasındaki parçalardan oluşan bir string[] döndürür. Birkaç ayırıcıyı dizi olarak (Split(new[] { ',', ';' })), string bir ayırıcıyı Split(new[] { ", " }, StringSplitOptions.None) ile verin ve ikilenmiş ayırıcıların ürettiği boş parçaları atmak için StringSplitOptions.RemoveEmptyEntries kullanın. .NET 5, her parçayı kırpmak için StringSplitOptions.TrimEntries'i ekledi.
Bir string'in başka bir string'i harf büyüklüğüne bakmadan içerip içermediği nasıl kontrol edilir?
.NET Core 2.1 ve sonrasında: text.Contains("error", StringComparison.OrdinalIgnoreCase). Bu overload'un olmadığı .NET Framework'te text.IndexOf("error", StringComparison.OrdinalIgnoreCase) >= 0 kullanın. Bir kopya ayıran ve bazı kültürlerde hatalı davranabilen text.ToLower().Contains(...)'dan kaçının.
C#'ta String.Replace orijinal string'i değiştirir mi?
Hayır. String'ler değiştirilemez, bu yüzden Replace her geçişin değiştirildiği yeni bir string döndürür ve orijinali olduğu gibi bırakır. s = s.Replace("old", "new"); yazın. Yalnızca ilkini değil tüm geçişleri değiştirir; yalnızca ilkini değiştirmek için onu IndexOf ile bulup string'i yeniden oluşturun ya da bir Regex örneğinde 1 sayısıyla Replace çağırın.
String bulunamazsa IndexOf ne döndürür?
-1. 0 ya da daha büyük her sonuç, ilk eşleşmenin sıfır tabanlı konumudur. Sonucu indeks olarak kullanmadan önce her zaman -1 kontrolü yapın, çünkü Substring(-1) istisna fırlatır, Substring(-1 + 1) ise sessizce tüm string'i döndürür. LastIndexOf sondan arayarak aynı şekilde çalışır.
C#'ta bir string nasıl ters çevrilir?
Onu bir char dizisine kopyalayın, diziyi ters çevirin ve yeni bir string oluşturun: char[] a = s.ToCharArray(); Array.Reverse(a); string r = new string(a);. LINQ ile new string(s.Reverse().ToArray()) aynı işi yapar. İkisi de UTF-16 birimlerini ters çevirir, bu yüzden emoji ve birleşik aksanlar bozuk çıkabilir.