String di Rust
Mengolah teks adalah salah satu hal pertama yang terasa berbeda di Rust dibanding bahasa lain, terutama karena Rust sebenarnya punya dua tipe string. Begitu kamu paham alasannya, semuanya tidak lagi membingungkan.
&str vs String
Section titled “&str vs String”&str(“string slice”, potongan string): teks yang sudah ada di suatu tempat, biasanya ditulis langsung di kode. Ukurannya tetap dan tidak bisa bertambah.String: teks yang dimiliki sendiri (owned) dan bisa bertambah panjang. Kamu bisa menambahkan isinya, dan datanya disimpan di heap.
fn main() { let literal: &str = "halo"; // sebuah string slice let owned: String = String::from("halo"); // sebuah String yang owned
println!("{literal} / {owned}");}Patokan sederhananya: kalau kamu hanya menampilkan teks yang tetap, "seperti ini" (sebuah &str) sudah cukup. Kalau kamu perlu menyusun, menambah, atau mengubah teks saat program berjalan, pakailah String.
Menambah isi String
Section titled “Menambah isi String”fn main() { let mut greeting = String::from("Halo"); greeting.push_str(", Dunia"); // tambahkan sebuah &str greeting.push('!'); // tambahkan satu char
println!("{greeting}");}Output:
Halo, Dunia!Menggabungkan string
Section titled “Menggabungkan string”Kamu bisa menggabungkan string dengan +, atau memakai format! (yang biasanya lebih jelas):
fn main() { let first = String::from("Halo, "); let second = String::from("Dunia!");
let combined = first + &second; // perhatikan & sebelum second println!("{combined}");
// format! sering kali lebih mudah dibaca: let name = "Ferris"; let greeting = format!("Halo, {name}!"); println!("{greeting}");}Method string yang berguna
Section titled “Method string yang berguna”Beberapa method yang akan sering sekali kamu pakai:
fn main() { let text = " Hello, Rust! ";
println!("{}", text.trim()); // "Hello, Rust!" (tanpa spasi di pinggir) println!("{}", text.to_uppercase()); // " HELLO, RUST! " println!("{}", text.to_lowercase()); // " hello, rust! " println!("{}", text.contains("Rust")); // true println!("{}", text.trim().len()); // 12 (panjang dalam byte) println!("{}", text.trim().replace("Rust", "World")); // "Hello, World!"}Teks di contoh ini sengaja dibiarkan dalam bahasa Inggris, karena salah satu barisnya menampilkan panjang string (12). Kalau teksnya diganti, angkanya juga ikut berubah.
Melakukan perulangan pada string
Section titled “Melakukan perulangan pada string”Untuk membaca string karakter demi karakter, pakai .chars():
fn main() { for c in "abc".chars() { println!("{c}"); }}Latihan
Section titled “Latihan”1. Rapikan input yang berantakan
Section titled “1. Rapikan input yang berantakan”Seseorang mengetik " rUsT is FUN " di sebuah form. Ubah menjadi rust is great: hapus spasi berlebih, jadikan huruf kecil semua, lalu ganti fun dengan great. Setelah itu, tampilkan hasilnya beserta panjangnya. Petunjuk: method string bisa dirangkai satu setelah yang lain: text.trim().to_lowercase()....
Lihat solusi
fn main() { let input = " rUsT is FUN ";
// trim dulu, lalu jadikan huruf kecil, lalu ganti "fun" (sekarang sudah huruf kecil) let clean = input.trim().to_lowercase().replace("fun", "great");
println!("{clean}"); println!("{} byte", clean.len());}Output:
rust is great13 byteUrutannya penting: kalau kamu memanggil .replace("fun", "great") sebelum .to_lowercase(), tidak ada yang diganti, karena teksnya masih bertuliskan FUN. (Teks di latihan ini tetap dalam bahasa Inggris karena panjangnya ikut ditampilkan.)
2. Susun alamat email
Section titled “2. Susun alamat email”Diberikan first = "Ada" dan last = "Lovelace", susun String [email protected] lalu tampilkan. Setelah itu, tampilkan apakah string itu mengandung @. Petunjuk: format! bisa menerima ekspresi seperti first.to_lowercase() sebagai argumen untuk slot {}-nya.
Lihat solusi
fn main() { let first = "Ada"; let last = "Lovelace";
let email = format!("{}.{}@example.com", first.to_lowercase(), last.to_lowercase());
println!("{email}"); println!("terlihat valid: {}", email.contains('@'));}Output:
terlihat valid: trueRingkasan
Section titled “Ringkasan”&stradalah teks pinjaman (borrowed) yang ukurannya tetap;Stringdimiliki sendiri (owned) dan bisa bertambah.- Tambahkan isi
Stringdengan.push_str()(untuk teks) atau.push()(untuk satu karakter). - Utamakan
format!daripada+saat menggabungkan string. Lebih jelas dan tidak memindahkan apa pun. - Method yang sering dipakai:
.trim(),.to_uppercase(),.contains(),.replace(),.chars().
Kuis singkat
Section titled “Kuis singkat”Kuis singkat
1. Tipe string mana yang owned (dimiliki sendiri) dan bisa bertambah saat program berjalan?
2. Kenapa halaman ini lebih memilih format! daripada + saat menggabungkan lebih dari satu atau dua string?
3. Kenapa kamu tidak bisa mengakses string Rust dengan indeks seperti text[0]?
4. Method mana yang menambahkan satu karakter ke sebuah String, seperti greeting.push('!')?
Skor: 0 / 4
Bacaan lebih lanjut
Section titled “Bacaan lebih lanjut”- Storing UTF-8 Encoded Text with Strings — The Rust Book (bahasa Inggris): bab resmi tentang
String, termasuk alasan kenapa kamu tidak bisa mengakses string berdasarkan posisi. - String Slices — The Rust Book (bahasa Inggris): apa sebenarnya
&stritu, setelah kamu belajar tentang borrowing. - Strings — Rust by Example (bahasa Inggris): contoh
Stringdan&stryang bisa dijalankan, ditambah karakter escape dan raw string. String— dokumentasi standard library (bahasa Inggris): semua method milikString, masing-masing dengan contoh kecil.str— dokumentasi standard library (bahasa Inggris): method sepertitrim,contains,replace, dansplityang bisa dipakai pada teks apa pun.