Обмен технологиями

[Rust] String Обучение строковому типу

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Что такое строка

  • В базовом языке Rust есть только один тип String — срез String.strобычно рассматривается как&strвзял взаймы.
  • Тип String предоставляется через стандартную библиотеку, а не закодирован напрямую в базовом языке. Это расширяемый, изменяемый тип в кодировке UTF-8.
  • strиStringВсе в кодировке utf-8.

Создать новую строку

  • Строка фактически реализуется путем переноса вектора типа байтов.
  • Создайте строку, используя новый метод:let mut s = String::new()
  • Создайте строку, используя метод to_string:
    let data = "initial contents";
    let s = data.to_string();
    let s = "initial contents".to_string();
    
    • 1
    • 2
    • 3
  • Создайте строку, используя метод String::from,let s = String::from("initial contents").

ОбновлениеСтрока

Добавить строку, используя push_str и push

let mut s = String::from("foo");
s.push_str("bar");
// s is foobar
  • 1
  • 2
  • 3

push_strМетод не меняет владельца строки

let mut s = String::from("lo");
s.push('l');
// s is lol
  • 1
  • 2
  • 3

Используйте оператор + или макрос формата для объединения строк!

let s1 = String::from("Hello, ");
let s2 = String::from("world!");
let s3 = s1 + &s2; // note s1 has been moved here and can no longer be used
  • 1
  • 2
  • 3
let s1 = String::from("tic");
let s2 = String::from("tac");
let s3 = String::from("toe");

let s = format!("{s1}-{s2}-{s3}");
  • 1
  • 2
  • 3
  • 4
  • 5

Rust не позволяет использовать индексацию для доступа к отдельным символам внутри строки.

Как перебирать строку

  • Доступ к отдельным символам UniCode можно получить с помощью метода chars. Используйте метод bytes для доступа к каждому байту.
for c in "Зд".chars() {
    println!("{c}");
}
  • 1
  • 2
  • 3