System.String punya puluhan method. Halaman ini membahas method yang paling banyak bekerja di kode sungguhan, beserta option dan jebakan yang penting. Ada satu aturan yang berlaku untuk semuanya: string bersifat immutable, jadi setiap method mengembalikan string baru (atau sebuah nilai) dan membiarkan string aslinya tidak berubah. s.Trim(); di barisnya sendiri tidak melakukan apa-apa; tulis s = s.Trim();.
Split
Split memecah string menjadi string[] di setiap pemisah:
Output:
3
apple
banana
cherry
red/green/ blue/yellow
INFO/started/ready
Perhatikan " blue": Split memotong tepat di pemisahnya dan mempertahankan spasi apa pun. Dua option menangani pembersihan yang umum:
Output:
5
4
c#|dotnet|linq
key=[Subject] value=[Re: Meeting: Friday]
3
RemoveEmptyEntries membuang bagian yang panjangnya nol, tetapi tidak membuang bagian yang hanya berisi spasi (" " tetap ada di atas). .NET 5 menambahkan StringSplitOptions.TrimEntries, dan keduanya bisa digabung: tags.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries) memberi hasil yang bersih dalam satu pemanggilan. Memberikan null sebagai pemisah akan memecah di setiap whitespace, dan itulah cara biasa memecah teks menjadi kata-kata.
Memecah dengan satu char (Split(',')) tidak butuh array. Overload yang menerima sebuah char plus option, atau satu string, tersedia mulai .NET Core 2.0; bentuk array yang dipakai di atas bisa dipakai di mana saja, termasuk .NET Framework dan Unity.
Replace
Replace mengganti setiap kemunculan sebuah karakter atau substring:
Output:
5551234567
555.123.4567
Cats and dogs and CATS
dogs and dogs and dogs
dogs and cats and CATS
too many spaces
Overload dengan argumen StringComparison tersedia di .NET Core 2.0 dan sesudahnya. Di .NET Framework, penggantian yang tidak peka huruf besar kecil dilakukan dengan Regex.Replace(text, Regex.Escape(find), replacement, RegexOptions.IgnoreCase). Mengganti dengan "" adalah cara menghapus karakter, dan merangkai beberapa pemanggilan Replace tidak masalah untuk beberapa penggantian saja.
Contains, IndexOf, StartsWith, dan EndsWith
Method-method ini melakukan pencarian. Contains menjawab ya atau tidak; IndexOf dan LastIndexOf mengembalikan posisi, atau -1 jika tidak ada yang cocok; StartsWith dan EndsWith menguji bagian ujungnya.
Output:
True
False
True
True
8
30
28
-1
16
False
True
True
Semuanya peka huruf besar kecil secara default. Contains(string, StringComparison) ada di .NET Core 2.1 dan sesudahnya; bentuk IndexOf(...) >= 0 bisa dipakai di semua versi, dan itulah sebabnya kamu sering melihatnya di kode lama. IndexOfAny(new[] { ',', ';' }) mencari kemunculan pertama dari beberapa karakter.
Catatan soal culture: tanpa StringComparison, StartsWith, EndsWith, IndexOf(string), dan CompareTo memakai aturan yang peka culture, sedangkan Contains, Replace, dan IndexOf(char) membandingkan secara ordinal. Memberikan StringComparison.Ordinal atau OrdinalIgnoreCase secara eksplisit menghilangkan keraguan itu, dan code analyzer pun merekomendasikannya.
Trim, TrimStart, dan TrimEnd
Trim menghapus whitespace (spasi, tab, baris baru) dari kedua ujung. TrimStart dan TrimEnd menghapus dari satu ujung saja. Jika diberi karakter, method ini menghapus karakter itu sebagai gantinya:
Output:
[ana@example.com]
[ana@example.com \n]
[ x]
SALE
7
path/to/dir
1,234.50
Trim hanya menyentuh bagian ujung; spasi di dalam string tetap ada. TrimStart('0') pada "000" mengembalikan string kosong, jadi lakukan parsing string angka dengan int.Parse daripada membuang nol secara manual.
ToUpper dan ToLower
Output:
MAYA LOPEZ
maya lopez
MAYA LOPEZ
Coffee
ToUpper dan ToLower mengikuti culture yang sedang aktif, jadi dalam bahasa Turki "i".ToUpper() adalah huruf kapital İ yang bertitik, bukan I. Untuk identifier, key, dan nama file, pakai ToUpperInvariant dan ToLowerInvariant. Untuk membandingkan, pakai StringComparison alih-alih mengubah huruf besar kecilnya (lihat string). Untuk membuat setiap kata berawalan huruf kapital, ada CultureInfo.CurrentCulture.TextInfo.ToTitleCase(text), meskipun method ini membiarkan kata yang sudah seluruhnya huruf kapital.
PadLeft dan PadRight
Padding menambahkan karakter sampai string mencapai lebar total tertentu. Ini berguna untuk output dengan lebar tetap dan untuk menambahkan nol di depan kode:
Output:
000042
[Tea ]
[ Tea]
Too long already
Espresso.. 2.40
Latte..... 3.60
Mocha..... 3.95
Alignment di interpolation ({name,-10}) melakukan pekerjaan yang sama langsung di dalam teks.
Join dan Concat
string.Join menaruh pemisah di antara elemen collection apa pun. string.Concat menggabungkan tanpa pemisah:
Output:
Ana, Ben, Chloe
1 + 2 + 3
True
2026-09
AnaBenChloe
Ana, Ben and Chloe
Join adalah cara yang tepat untuk membangun daftar dengan pemisah: tidak ada pemisah di ujung yang perlu dihapus, dan hasilnya dibangun dalam sekali jalan. Method ini memanggil ToString() pada setiap elemen, jadi bisa dipakai juga untuk angka dan object.
Reverse, Insert, dan Remove
Tidak ada method string.Reverse yang mengembalikan string. Ada dua cara yang biasa dipakai:
Output:
desserts
desserts
True
2026/Q3-09
Hello
HelloWorld
word.Reverse() saja mengembalikan IEnumerable<char>, bukan string; mencetaknya akan menampilkan nama tipe. Kedua cara itu membalik code unit UTF-16, yang merusak karakter yang terdiri dari dua unit (kebanyakan emoji) dan huruf dengan aksen gabungan.
Referensi singkat
| Tugas | Method |
|---|---|
| Memecah menjadi bagian-bagian | s.Split(','), s.Split(new[] {',', ';'}, StringSplitOptions.RemoveEmptyEntries) |
| Mengganti semua | s.Replace("a", "b") |
| Memeriksa isi | s.Contains("x"), s.Contains("x", StringComparison.OrdinalIgnoreCase) |
| Posisi | s.IndexOf("x"), s.LastIndexOf('x') (-1 jika tidak ada) |
| Diawali atau diakhiri dengan | s.StartsWith("x"), s.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase) |
| Menghapus whitespace di ujung | s.Trim(), s.TrimStart(), s.TrimEnd() |
| Mengubah huruf besar kecil | s.ToUpper(), s.ToLowerInvariant() |
| Padding sampai lebar tertentu | s.PadLeft(6, '0'), s.PadRight(10) |
| Menggabungkan collection | string.Join(", ", items) |
| Bagian dari string | s.Substring(start, length) |
| Menyisipkan atau menghapus | s.Insert(i, "x"), s.Remove(i, count) |
| Cek null atau kosong | string.IsNullOrWhiteSpace(s) |
Pertanyaan yang sering diajukan
Bagaimana cara memecah string di C#?
text.Split(',') mengembalikan string[] berisi bagian-bagian di antara koma. Berikan beberapa pemisah sebagai array (Split(new[] { ',', ';' })), pemisah berupa string dengan Split(new[] { ", " }, StringSplitOptions.None), dan StringSplitOptions.RemoveEmptyEntries untuk membuang bagian kosong yang muncul akibat pemisah ganda. .NET 5 menambahkan StringSplitOptions.TrimEntries untuk melakukan trim pada setiap bagian.
Bagaimana cara memeriksa apakah sebuah string berisi string lain tanpa memedulikan huruf besar kecil?
Di .NET Core 2.1 dan sesudahnya: text.Contains("error", StringComparison.OrdinalIgnoreCase). Di .NET Framework, yang tidak punya overload itu, pakai text.IndexOf("error", StringComparison.OrdinalIgnoreCase) >= 0. Hindari text.ToLower().Contains(...), yang membuat salinan baru dan bisa berperilaku aneh di beberapa culture.
Apakah String.Replace mengubah string aslinya di C#?
Tidak. String bersifat immutable, jadi Replace mengembalikan string baru dengan setiap kemunculannya sudah diganti dan membiarkan string asli seperti semula. Tulis s = s.Replace("old", "new");. Method ini mengganti semua kemunculan, bukan hanya yang pertama; untuk mengganti yang pertama saja, cari dengan IndexOf lalu susun ulang string-nya, atau panggil Replace pada instance Regex dengan jumlah 1.
Apa yang dikembalikan IndexOf jika string tidak ditemukan?
-1. Hasil 0 atau lebih adalah posisi kecocokan pertama, dihitung mulai dari nol. Selalu periksa -1 sebelum memakai hasilnya sebagai indeks, karena Substring(-1) melempar exception dan Substring(-1 + 1) diam-diam mengembalikan seluruh string. LastIndexOf bekerja dengan cara yang sama, tetapi mencari dari ujung.
Bagaimana cara membalik string di C#?
Salin ke array char, balik array-nya, lalu buat string baru: char[] a = s.ToCharArray(); Array.Reverse(a); string r = new string(a);. Dengan LINQ, new string(s.Reverse().ToArray()) melakukan hal yang sama. Keduanya membalik unit UTF-16, jadi emoji dan aksen gabungan bisa jadi berantakan.