Bagikan melalui


Cara mengubah konten string di C#

Artikel ini menunjukkan beberapa teknik untuk menghasilkan string dengan memodifikasi file string yang ada. Semua teknik yang didemonstrasikan mengembalikan hasil modifikasi sebagai objek string baru. Untuk mendemonstrasikan bahwa string asli dan yang dimodifikasi adalah instance yang berbeda, contoh menyimpan hasilnya dalam variabel baru. Anda dapat memeriksa string yang asli dan yang baru, yang dimodifikasi string saat menjalankan setiap contoh.

Catatan

Contoh C# dalam artikel ini dijalankan di Try.NET pelari kode sebaris dan taman bermain. Pilih tombol Jalankan untuk menjalankan contoh di jendela interaktif. Setelah Anda menjalankan kode, Anda dapat memodifikasinya dan menjalankan kode yang dimodifikasi dengan memilih Jalankan lagi. Kode yang dimodifikasi berjalan di jendela interaktif atau, jika kompilasi gagal, jendela interaktif menampilkan semua pesan kesalahan pengompilasi C#.

Terdapat beberapa teknik yang ditunjukkan dalam artikel ini. Anda dapat mengganti teks yang ada. Anda bisa mencari pola dan mengganti teks yang cocok dengan teks lain. Anda bisa memperlakukan string sebagai urutan karakter. Anda juga dapat menggunakan metode praktis yang menghilangkan spasi. Pilihlah teknik yang paling cocok dengan skenario Anda.

Ganti teks

Kode berikut ini membuat string baru dengan mengganti teks yang ada dengan pengganti.

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

// Replace one substring with another with String.Replace.
// Only exact matches are supported.
var replacement = source.Replace("mountains", "peaks");
Console.WriteLine($"The source string is <{source}>");
Console.WriteLine($"The updated string is <{replacement}>");

Kode sebelumnya menunjukkan properti string yang tidak dapat diubah ini. Anda dapat melihat pada contoh sebelumnya bahwa string asli, source, tidak dimodifikasi. Metode String.Replace ini membuat string yang baru berisi modifikasi.

Metode Replace ini dapat menggantikan string atau karakter tunggal. Dalam kedua kasus ini, setiap kemunculan teks yang dicari diganti. Contoh berikut mengganti semua karakter ' ' dengan '_':

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

// Replace all occurrences of one char with another.
var replacement = source.Replace(' ', '_');
Console.WriteLine(source);
Console.WriteLine(replacement);

String sumber tidak berubah, dan string baru dikembalikan dengan penggantinya.

Pangkas ruang kosong

Anda dapat menggunakan metode String.Trim, String.TrimStart, dan String.TrimEnd untuk menghapus spasi di depan atau di belakang. Kode berikut menunjukkan contoh masing-masing. String sumber tidak berubah; metode ini mengembalikan string baru dengan konten yang sudah dimodifikasi.

// Remove trailing and leading white space.
string source = "    I'm wider than I need to be.      ";
// Store the results in a new string variable.
var trimmedResult = source.Trim();
var trimLeading = source.TrimStart();
var trimTrailing = source.TrimEnd();
Console.WriteLine($"<{source}>");
Console.WriteLine($"<{trimmedResult}>");
Console.WriteLine($"<{trimLeading}>");
Console.WriteLine($"<{trimTrailing}>");

Hilangkan teks

Anda dapat menghapus teks dari string menggunakan metode String.Remove. Metode ini menghapus sejumlah karakter mulai dari indeks tertentu. Contoh berikut menunjukkan cara menggunakan String.IndexOf diikuti oleh Remove untuk menghapus teks dari string:

string source = "Many mountains are behind many clouds today.";
// Remove a substring from the middle of the string.
string toRemove = "many ";
string result = string.Empty;
int i = source.IndexOf(toRemove);
if (i >= 0)
{
    result= source.Remove(i, toRemove.Length);
}
Console.WriteLine(source);
Console.WriteLine(result);

Ganti pola yang cocok

Anda dapat menggunakan ekspresi reguler untuk mengganti pola pencocokan teks dengan teks baru, yang mungkin ditentukan oleh suatu pola. Contoh berikut menggunakan kelas System.Text.RegularExpressions.Regex untuk menemukan pola dalam string sumber dan menggantinya dengan kapitalisasi yang tepat. Metode Regex.Replace(String, String, MatchEvaluator, RegexOptions) ini mengambil fungsi yang menyediakan logika penggantian sebagai salah satu argumennya. Dalam contoh ini, fungsi tersebut, LocalReplaceMatchCase adalah fungsi lokal yang dideklarasikan dalam metode sampel. LocalReplaceMatchCase menggunakan kelas System.Text.StringBuilder untuk membuat string pengganti dengan kapitalisasi yang tepat.

Ekspresi reguler paling berguna untuk mencari dan mengganti teks yang mengikuti pola, daripada teks yang dikenal. Untuk informasi selengkapnya, lihat Cara mencari string . Pola pencarian, "the\s" mencari kata "the" yang diikuti dengan karakter spasi putih. Bagian pola itu memastikan bahwa itu tidak cocok dengan "ada" di string sumber. Untuk informasi selengkapnya tentang elemen bahasa ekspresi reguler, lihat Bahasa Ekspresi Reguler - Referensi Cepat.

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

// Use Regex.Replace for more flexibility.
// Replace "the" or "The" with "many" or "Many".
// using System.Text.RegularExpressions
string replaceWith = "many ";
source = System.Text.RegularExpressions.Regex.Replace(source, "the\\s", LocalReplaceMatchCase,
    System.Text.RegularExpressions.RegexOptions.IgnoreCase);
Console.WriteLine(source);

string LocalReplaceMatchCase(System.Text.RegularExpressions.Match matchExpression)
{
    // Test whether the match is capitalized
    if (Char.IsUpper(matchExpression.Value[0]))
    {
        // Capitalize the replacement string
        System.Text.StringBuilder replacementBuilder = new System.Text.StringBuilder(replaceWith);
        replacementBuilder[0] = Char.ToUpper(replacementBuilder[0]);
        return replacementBuilder.ToString();
    }
    else
    {
        return replaceWith;
    }
}

Metode StringBuilder.ToString mengembalikan string yang tidak dapat diubah dengan konten dalam objek StringBuilder.

Memodifikasi karakter individu

Anda bisa menghasilkan larik karakter dari string, memodifikasi konten larik, lalu membuat string baru dari konten larik yang dimodifikasi.

Contoh berikut menunjukkan cara mengganti sekumpulan karakter dalam sebuah string. Pertama, ia menggunakan metode String.ToCharArray() untuk membuat array karakter. Ia menggunakan metode IndexOf untuk menemukan indeks awal dari kata "rubah." Tiga karakter berikutnya diganti dengan kata yang berbeda. Akhirnya, string baru dibangun dari array karakter yang diperbarui.

string phrase = "The quick brown fox jumps over the fence";
Console.WriteLine(phrase);

char[] phraseAsChars = phrase.ToCharArray();
int animalIndex = phrase.IndexOf("fox");
if (animalIndex != -1)
{
    phraseAsChars[animalIndex++] = 'c';
    phraseAsChars[animalIndex++] = 'a';
    phraseAsChars[animalIndex] = 't';
}

string updatedPhrase = new string(phraseAsChars);
Console.WriteLine(updatedPhrase);

Secara terprogram membangun konten string

Karena string tidak dapat diubah, contoh sebelumnya semuanya membuat string sementara atau array karakter. Dalam skenario kinerja tinggi, mungkin diinginkan untuk menghindari alokasi tumpukan ini. .NET Core menyediakan metode String.Create yang memungkinkan Anda untuk secara terprogram mengisi konten karakter string melalui panggilan balik sambil menghindari alokasi string sementara perantara.

// constructing a string from a char array, prefix it with some additional characters
char[] chars = { 'a', 'b', 'c', 'd', '\0' };
int length = chars.Length + 2;
string result = string.Create(length, chars, (Span<char> strContent, char[] charArray) =>
{
    strContent[0] = '0';
    strContent[1] = '1';
    for (int i = 0; i < charArray.Length; i++)
    {
        strContent[i + 2] = charArray[i];
    }
});

Console.WriteLine(result);

Anda dapat memodifikasi string dalam blok tetap dengan kode yang tidak aman, tetapi sangat tidak disarankan untuk mengubah konten string setelah string dibuat. Melakukannya akan merusak hal-hal dengan cara yang tidak terduga. Misalnya, jika seseorang magang string yang memiliki konten yang sama dengan Anda, mereka akan mendapatkan salinan Anda dan tidak akan mengharapkan Anda memodifikasi string mereka.

Lihat juga