String

Последнее обновление: 28.04.2021

Для работы со строками Rust предоставляет тип String, который представляет расширяемые и изменяемые строки в кодировке UTF-8. В реальности тип String представляет надстройку над вектором Vec<u8>, который хранит набор чисел u8, представляющих символы строки.

Определение объекта String

Для создания пустого объекта String применяется функция String::new():

let message = String::new();

Для создания объекта String с некоторым начальным содержимым может применяться функция String::from(), в которую передается начальное содержимое строки:

let message = String::from("Hello"); 

Также можно применять метод to_string(), который есть у разных типов данных и который возвращает объект String:

let message = "hello".to_string();

Длина строки

Для получения длины строки применяется метод chars().count():

fn main(){
  
    let message = String::from("Hello"); 
	let length = message.chars().count();
	println!("length: {}", length);	// 5
}

Изменение String

Структура String имеет разные методы для изменения содержимого. Например, метод push() добавляет один символ:

fn main(){
  
    let mut message = String::from("hello");
	message.push('?');	
	println!("Message: {}", message);	// Message: hello?
}

Метод push_str() добавляет строку:

fn main(){
  
    let mut message = String::from("hello");
	message.push_str(" Rust");	
	println!("Message: {}", message);	// Message: hello Rust
}

Объединение строк

Для объединения строк можно использовать оператор сложения +:

fn main(){
  
	let hello = String::from("hello ");
	let rust = String::from("Rust");
    let message = hello + &rust;
	
	println!("Message: {}", message);	// Message: hello Rust
}

Обратите внимание, что для вторая строка передается как ссылка. Так как в реальности оператор + использует метод add(), который в качестве второго параметра использует строковый слайс:

fn add(self, s: &str) -> String {

Подобным образом можно объединять и большее количество строк - в этом случае все последующие объекты String будут передаваться как ссылки:

fn main(){
  
	let hello = String::from("hello ");
	let rust = String::from("Rust");
	let metanit = String::from(" on Metanit.com");
    let message = hello + &rust + &metanit;
	
	println!("{}", message);	// hello Rust on Metanit.com
}

Стоит учитывать, что после объединения строк с помощью их сложения, мы не сможем использовать первую строку, которая передается без ссылки.

fn main(){
  
	let hello = String::from("hello ");
	let rust = String::from("Rust");
    let message = hello + &rust;
	
	println!("{}", message);	// hello Rust
	
	// println!("{}", hello);	// !Ошибка владение данными перешло от переменной hello к message
}

Форматирование

Макрос format! позволяет объединить строки в одну общую строку. Он похож на макрос println!, только возвращает объект String:

fn main(){
  
	let hello = String::from("hello ");
	let rust = String::from("Rust");
    let message = format!("{} {} on Metanit.com", hello, rust);
	
	println!("{}", message);	// hello Rust on Metanit.com
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850