String
String — це розширюваний рядок у кодуванні UTF-8:
fn main() { let mut s1 = String::new(); s1.push_str("Привіт"); println!("s1: len = {}, capacity = {}", s1.len(), s1.capacity()); let mut s2 = String::with_capacity(s1.len() + 1); s2.push_str(&s1); s2.push('!'); println!("s2: len = {}, capacity = {}", s2.len(), s2.capacity()); let s3 = String::from("🇨🇭"); println!("s3: len = {}, number of chars = {}", s3.len(), s3.chars().count()); }
String реалізує Deref<Target = str>, що означає, що ви можете викликати усі методи str у String.
This slide should take about 5 minutes. 
                    String::newповертає новий порожній рядок. ВикористовуйтеString::with_capacity, якщо ви знаєте, скільки даних ви хочете передати в рядок.String::lenповертає розмірStringу байтах (який може відрізнятися від його довжини в символах).String::charsповертає ітератор поверх фактичних символів. Зауважте, щоcharможе відрізнятися від того, що людина вважатиме “символом” через кластери графем.- Коли люди посилаються на рядки, вони можуть говорити про 
&strабоString. - Коли тип реалізує 
Deref<Target = T>, компілятор дозволить вам прозоро викликати методи зT.- Ми ще не обговорювали трейт 
Deref, тому на даний момент це здебільшого пояснює структуру бокової панелі у документації. StringреалізуєDeref<Target = str>, що прозоро надає йому доступ до методівstr.- Напишіть і порівняйте 
let s3 = s1.deref();andlet s3 = &*s1; 
 - Ми ще не обговорювали трейт 
 Stringреалізовано як оболонку навколо вектора байтів, багато операцій, які ви бачите, що підтримуються над векторами, також підтримуютьсяString, але з деякими додатковими гарантіями.- Порівняйте різні способи індексування 
String:- До символу за допомогою 
s3.chars().nth(i).unwrap(), деiє в межі, поза межами. - До підрядка за допомогою 
s3[0..4], де цей фрагмент знаходиться на межах символів чи ні. 
 - До символу за допомогою 
 - Багато типів можна перетворити у рядок за допомогою методу 
to_string. Цей трейт автоматично реалізується для всіх типів, що реалізуютьDisplay, тому все, що може бути відформатовано, також може бути перетворено у рядок.