Mengubah konten string di C#

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? Seperti Java dan JavaScript, string C# tidak dapat diubah: metode seperti Replace dan Trim mengembalikan string baru alih-alih mengubah yang asli. Pola di sini sejajar dengan metode String dalam bahasa-bahasa tersebut.

C# stringtidak dapat diubah, yang berarti kontennya tidak pernah berubah setelah Anda membuatnya. Setiap metode yang tampaknya memodifikasi string sebenarnya mengembalikan string baru dengan perubahan tersebut, sementara string asli tetap utuh. Contoh dalam artikel ini menyimpan setiap hasil dalam variabel baru sehingga Anda dapat melihat sumber dan nilai yang dimodifikasi.

Pilih teknik yang cocok dengan skenario Anda: ganti teks yang diketahui, pangkas spasi putih, hapus rentang karakter, ganti teks yang cocok dengan pola, atau edit karakter individual.

Ganti teks yang dikenali

Metode ini String.Replace menggantikan setiap kemunculan satu string dengan string lain dan mengembalikan hasilnya sebagai string baru:

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.

String asli tidak berubah, yang menunjukkan kekekalan: Replace membuat string baru dengan penggantian.

Replace juga memiliki kelebihan beban yang menukar karakter tunggal. Contoh berikut mengganti setiap spasi dengan garis bawah:

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.

Kedua kelebihan beban menggantikan setiap kecocokan dalam string, bukan hanya yang pertama. Baik Anda memberikan satu karakter maupun sebuah string, Replace menggantikan semua kemunculannya dalam satu panggilan.

Memangkas spasi kosong

Gunakan String.Trim, String.TrimStart, dan String.TrimEnd untuk menghapus spasi kosong di depan atau di belakang. Setiap metode mengembalikan string baru:

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.>

Hapus rangkaian karakter

Metode String.Remove menghapus sejumlah karakter mulai dari indeks tertentu. Gabungkan dengan String.IndexOf untuk menemukan teks yang akan dihapus:

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.

Mengganti teks yang cocok dengan pola

Saat Anda perlu mengganti teks yang mengikuti pola daripada string yang tepat, gunakan ekspresi reguler. Metode ini Regex.Replace menerima fungsi yang menghitung setiap penggantian, sehingga Anda dapat mempertahankan detail seperti kapitalisasi asli. Pola the\s mencocokkan "the" yang diikuti oleh karakter spasi, sehingga tidak akan mencocokkan "there":

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.

Untuk pencarian berbasis pola daripada penggantian, lihat Mencari string di C#. Untuk sintaks ekspresi reguler, lihat Referensi cepat bahasa ekspresi reguler.

Mengubah karakter individual

Untuk mengubah karakter menurut posisi, salin string ke dalam Span<T> karakter, ubah rentang, lalu buat string baru darinya. Contoh berikut menemukan kata "rubah" dan menggantinya dengan "kucing":

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.

Untuk skenario performa tinggi yang menghindari alokasi perantara, runtime menyediakan API tingkat bawah seperti String.Create. Teknik-teknik tersebut maju; untuk kode sehari-hari, metode dalam artikel ini adalah pilihan yang tepat.

Baca juga