C'de dize içeriğini değiştirme#

Tavsiye

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? Java ve JavaScript gibi C# dizeleri de sabittir: ve gibi ReplaceTrim yöntemler özgün dizeyi değiştirmek yerine yeni bir dize döndürür. Buradaki desenler, bu dillerdeki paralel String yöntemlerdir.

Bir C# stringdeğiştirilemez; yani onu oluşturduktan sonra içeriği asla değişmez. Bir dizeyi değiştiriyor gibi görünen her yöntem, aslında değişiklikleri içeren yeni bir string döndürür ve orijinal dizeyi bozulmadan bırakır. Bu makaledeki örnekler, hem kaynağı hem de değiştirilen değeri görebilmeniz için her sonucu yeni bir değişkende depolar.

Senaryonuzla eşleşen tekniği seçin: bilinen metni değiştirin, boşluğu kırpın, karakter aralığını kaldırın, desenle eşleşen metni değiştirin veya karakterleri tek tek düzenleyin.

Bilinen metni değiştirme

yöntemi, String.Replace bir dizenin her örneğini başka bir dizeyle değiştirip sonucu yeni bir dize olarak döndürür:

string source = "The mountains are behind the clouds today.";

// Replace returns a new string; the original is unchanged.
string updated = source.Replace("mountains", "peaks");

Console.WriteLine(source);
// => The mountains are behind the clouds today.
Console.WriteLine(updated);
// => The peaks are behind the clouds today.

Özgün dize değiştirilmez, bu da değişmezliği gösterir: Replace değiştirme ile yeni bir dize oluşturur.

Replace ayrıca tek karakterleri değiştirmek için de bir aşırı yükleme içerir. Aşağıdaki örnek, her boşluğu bir alt çizgiyle değiştirir:

string source = "The mountains are behind the clouds today.";

// Replace every occurrence of one character with another.
string updated = source.Replace(' ', '_');

Console.WriteLine(updated);
// => The_mountains_are_behind_the_clouds_today.

Her iki aşırı yükleme de dizede yalnızca ilkini değil, every ifadesine uyan tüm eşleşmeleri değiştirir. Tek bir karakter ya da bir dize geçirseniz de, Replace tüm eşleşmelerin tümünü tek bir çağrıda değiştirir.

Boşluğu kırp

Baştaki veya sondaki boşluğu kaldırmak için , String.Trimve String.TrimStart kullanınString.TrimEnd. Her yöntem yeni bir dize döndürür:

string source = "    I'm wider than I need to be.      ";

// Each method returns a new string with whitespace removed.
Console.WriteLine($"<{source.Trim()}>");
// => <I'm wider than I need to be.>
Console.WriteLine($"<{source.TrimStart()}>");
// => <I'm wider than I need to be.      >
Console.WriteLine($"<{source.TrimEnd()}>");
// => <    I'm wider than I need to be.>

Karakter aralığını kaldırma

yöntemi, String.Remove dizinden başlayarak bir dizi karakteri siler. Kaldırılacak metni bulmak için bunu ile String.IndexOf birleştirin:

string source = "Many mountains are behind many clouds today.";
string toRemove = "many ";

// Find the text, then remove that span by index and length.
int index = source.IndexOf(toRemove);
string result = index >= 0
    ? source.Remove(index, toRemove.Length)
    : source;

Console.WriteLine(result);
// => Many mountains are behind clouds today.

Desenle eşleşen metni değiştirme

Tam bir dize yerine desen izleyen metni değiştirmeniz gerektiğinde , normal ifadeleri kullanın. Regex.Replace yöntemi, her değişikliği hesaplayan bir işlev kabul eder, böylece özgün büyük harf kullanımı gibi ayrıntıları koruyabilirsiniz. the\s deseni, ardından bir boşluk karakteri gelen "the" ile eşleşir; bu da "there" ile eşleşmesini engeller:

string source = "The mountains are still there behind the clouds today.";

// Replace "the" or "The" followed by whitespace, preserving the original case.
// The \s in the pattern keeps "there" from matching.
string result = Regex.Replace(
    source,
    """the\s""",
    match => char.IsUpper(match.Value[0]) ? "Many " : "many ",
    RegexOptions.IgnoreCase);

Console.WriteLine(result);
// => Many mountains are still there behind many clouds today.

Değiştirme yerine desen tabanlı arama için bkz. C# dilinde dizeleri arama. Düzenli ifade söz dizimi için Düzenli ifade dili hızlı başvurusu bölümüne bakın.

Tek tek karakterleri değiştirme

Karakterleri konuma göre değiştirmek için dizeyi bir Span<T> karaktere kopyalayın, yayılmayı değiştirin ve ardından bu dizeden yeni bir dize oluşturun. Aşağıdaki örnek "tilki" sözcüğünü bulur ve "kedi" ile değiştirir:

string phrase = "The quick brown fox jumps over the fence.";

// A string is immutable, so copy it into a Span<char> to edit in place.
Span<char> characters = stackalloc char[phrase.Length];
phrase.CopyTo(characters);
int index = phrase.IndexOf("fox");
if (index != -1)
{
    characters[index] = 'c';
    characters[index + 1] = 'a';
    characters[index + 2] = 't';
}

// Build a new string from the modified characters.
string updated = new string(characters);
Console.WriteLine(updated);
// => The quick brown cat jumps over the fence.

Ara tahsislerden kaçınan yüksek performanslı senaryolar için çalışma zamanı, String.Create gibi daha alt düzey API'ler sağlar. Bu teknikler gelişmiştir; günlük kod için bu makaledeki yöntemler doğru seçimdir.

Ayrıca bakınız