String
String é uma string UTF-8 expansível:
fn main() { let mut s1 = String::new(); s1.push_str("Olá"); println!("s1: tam = {}, capacidade = {}", s1.len(), s1.capacity()); let mut s2 = String::with_capacity(s1.len() + 1); s2.push_str(&s1); s2.push('!'); println!("s2: tam = {}, capacidade = {}", s2.len(), s2.capacity()); let s3 = String::from("🇧🇷"); println!("s3: tam = {}, número de caracteres = {}", s3.len(), s3.chars().count()); }
String implementa Deref<Target = str>, o que significa que você pode chamar todos os métodos de str em uma String.
This slide should take about 5 minutes.
String::newretorna uma nova string vazia, useString::with_capacityquando você sabe a quantidade de dados que você deseja colocar na string.String::lenretorna o tamanho daStringem bytes (que pode ser diferente de seu comprimento em caracteres).String::charsretorna um iterador com os caracteres de fato. Observe que umcharpode ser diferente do que um humano considerará um “caracter” devido a agrupamentos de grafemas (grapheme clusters).- Quando as pessoas se referem a strings, elas podem estar falando sobre
&strouString. - Quando um tipo implementa
Deref<Target = T>, o compilador permitirá que você transparentemente chame métodos deT.- Ainda não discutimos o trait
Deref, então, neste ponto, isso explica principalmente a estrutura da barra lateral na documentação. StringimplementaDeref<Target = str>que, de forma transparente, dá acesso aos métodos destr.- Escreva e compare
let s3 = s1.deref();elet s3 = &*s1;.
- Ainda não discutimos o trait
Stringé implementado como um wrapper em torno de um vetor de bytes, muitas das operações que você vê suportadas em vetores também são suportadas emString, mas com algumas garantias extras.- Compare as diferentes formas de indexar uma
String:- Para um caracter usando
s3.chars().nth(i).unwrap()ondeiestá dentro dos limites, fora dos limites. - Para uma substring usando
s3[0..4], onde essa slice está nos limites dos caracteres ou não.
- Para um caracter usando
- Muitos tipos podem ser convertidos para uma string com o método
to_string. Este trait é implementado automaticamente para todos os tipos que implementamDisplay, então qualquer coisa que possa ser formatada também pode ser convertida para uma string.