String dilimleme
- Rust kursu
- Başlangıç
- Ders 102/115
- 4 dk
Dilimlerle alt string almanın doğru yolunu öğrenirsin.
String dilimleme
Metni bayt aralığıyla dilimlemek, aralık bir karakterin ortasına düşerse panic verir. Rust bu yüzden s[0] gibi tek indeksle erişime hiç izin vermez:
let s = "Çiçekçi";
// let c = s[0]; // hata: str indekslenemez
// let x = &s[0..1]; // panic: Ç iki bayt
println!("{}", s.is_char_boundary(2)); // true
println!("{}", &s[0..2]); // Çchar_indices
Kopya yapmadan karakter sınırında dilim almak istiyorsan char_indices her karakterin bayt konumunu verir:
let s = "Çiçekçi";
for (i, c) in s.char_indices().take(4) {
print!("{i}:{c} "); // 0:Ç 2:i 3:ç 5:e
}
let (son, _) = s.char_indices().nth(3).unwrap();
println!("{}", &s[..son]); // Çiç4. karakterin başladığı bayt (5), ilk üç karakterin bittiği yerdir.
Uygulama Güvenli ilk üç
let s = "Çiçekçi"; için char_indices().nth(3) ile 4. karakterin bayt konumunu bul. &s[..konum] dilimini ve konumu boşlukla yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
fn main() {
let s = "Çiçekçi";
let (konum, _) = s.char_indices().nth(3).unwrap();
println!("{} {}", &s[..konum], konum);
}Beklenen çıktı
Çiç 5
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir metnin ilk 3 karakterini güvenle almanın en basit yolu hangisi?
- s[3]
- s.bytes().take(3)
- s.chars().take(3).collect::<String>() Doğru cevap
- &s[0..3]
Açıklama: chars karakter sınırlarına göre ilerler; &s[0..3] Türkçe harflerde panic verebilir.
2 Bayt konumları
for (i, c) in s.____() {
println!("{i}: {c}");
}
for (i, c) in s.char_indices() {
println!("{i}: {c}");
}
Açıklama: char_indices (bayt konumu, karakter) ikilileri verir.
3 "Çiçekçi" üzerinde ifade ve sonucu
| Kavram | Anlamı |
|---|---|
&s[0..2] |
"Ç" |
&s[0..1] |
Panic |
s.is_char_boundary(1) |
false |
s.char_indices().nth(3) |
Some((5, 'e')) |