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::new
retorna uma nova string vazia, useString::with_capacity
quando vocĂȘ sabe a quantidade de dados que vocĂȘ deseja colocar na string.String::len
retorna o tamanho daString
em bytes (que pode ser diferente de seu comprimento em caracteres).String::chars
retorna um iterador com os caracteres de fato. Observe que umchar
pode 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
&str
ouString
. - 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. String
implementaDeref<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()
ondei
estĂĄ 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.