Тип данных String в Rust можно классифицировать на следующие:
-
Строковый литерал (& str)
-
String Object (Строка)
Строковый литерал (& str)
String Object (Строка)
Строковый литерал
Строковые литералы (& str) используются, когда значение строки известно во время компиляции. Строковые литералы — это набор символов, которые жестко закодированы в переменную. Например, пусть company = «Tutorials Point» . Строковые литералы находятся в модуле std :: str. Строковые литералы также известны как строковые фрагменты.
В следующем примере объявляются два строковых литерала — компания и местоположение .
fn main() { let company:&str="TutorialsPoint"; let location:&str = "Hyderabad"; println!("company is : {} location :{}",company,location); }
Строковые литералы являются статическими по умолчанию. Это означает, что строковые литералы гарантированно будут действительны в течение всей программы. Мы также можем явно указать переменную как статическую, как показано ниже —
fn main() { let company:&'static str = "TutorialsPoint"; let location:&'static str = "Hyderabad"; println!("company is : {} location :{}",company,location); }
Вышеуказанная программа сгенерирует следующий вывод —
company is : TutorialsPoint location :Hyderabad
String Object
Тип объекта String предоставляется в стандартной библиотеке. В отличие от строкового литерала, тип строкового объекта не является частью основного языка. Он определен как публичная структура в стандартной библиотеке pub struct String . String — это растущая коллекция. Это изменчивый тип UTF-8. Тип объекта String может использоваться для представления строковых значений, которые предоставляются во время выполнения. Строковый объект размещается в куче.
Синтаксис
Чтобы создать объект String, мы можем использовать любой из следующих синтаксисов:
String::new()
Приведенный выше синтаксис создает пустую строку
String::from()
Это создает строку с некоторым значением по умолчанию, переданным в качестве параметра методу from () .
Следующий пример иллюстрирует использование объекта String.
fn main(){ let empty_string = String::new(); println!("length is {}",empty_string.len()); let content_string = String::from("TutorialsPoint"); println!("length is {}",content_string.len()); }
В приведенном выше примере создаются две строки — пустой строковый объект с использованием нового метода и строковый объект из строкового литерала с использованием метода from .
Вывод как показано ниже —
length is 0 length is 14
Общие методы — String Object
Sr.No. | метод | Подпись | Описание |
---|---|---|---|
1 | новый () | pub const fn new () → Строка | Создает новую пустую строку. |
2 | нанизывать() | fn to_string (& self) → String | Преобразует данное значение в строку. |
3 | заменить () | pub fn replace <‘a, P> (&’ a self, from: P, to: & str) → String | Заменяет все совпадения шаблона другой строкой. |
4 | as_str () | паб fn as_str (& self) → & str | Извлекает фрагмент строки, содержащий всю строку. |
5 | От себя() | паб fn push (& mut self, ch: char) | Добавляет указанный символ в конец этой строки. |
6 | push_str () | pub fn push_str (& mut self, string: & str) | Добавляет данный фрагмент строки в конец этой строки. |
7 | LEN () | паб fn len (& self) → usize | Возвращает длину этой строки в байтах. |
8 | отделка() | Паб fn trim (& self) → & str | Возвращает фрагмент строки с удаленными начальными и конечными пробелами. |
9 | split_whitespace () | pub fn split_whitespace (& self) → SplitWhitespace | Разбивает фрагмент строки по пробелам и возвращает итератор. |
10 | Трещина() | pub fn split <‘a, P> (&’ a self, pat: P) → Split <‘a, P>, где P — это шаблон, который может быть & str, char или замыканием, определяющим разделение. | Возвращает итератор для подстрок этого среза строки, разделенных символами, соответствующими шаблону. |
11 | символы () | паб fn chars (& self) → Чарс | Возвращает итератор для символов фрагмента строки. |
Иллюстрация: новый ()
Пустой строковый объект создается с использованием метода new (), и его значение устанавливается в hello .
fn main(){ let mut z = String::new(); z.push_str("hello"); println!("{}",z); }
Выход
Вышеуказанная программа генерирует следующий вывод —
hello
Иллюстрация: to_string ()
Чтобы получить доступ ко всем методам объекта String, преобразуйте строковый литерал в тип объекта с помощью функции to_string () .
fn main(){ let name1 = "Hello TutorialsPoint , Hello!".to_string(); println!("{}",name1); }
Выход
Вышеуказанная программа генерирует следующий вывод —
Hello TutorialsPoint , Hello!
Иллюстрация: заменить ()
Функция replace () принимает два параметра: первый параметр — это строковый шаблон для поиска, а второй параметр — новое значение, которое необходимо заменить. В приведенном выше примере Hello появляется два раза в строке name1 .
Функция replace заменяет все вхождения строки Hello на Howdy .
fn main(){ let name1 = "Hello TutorialsPoint , Hello!".to_string(); //String object let name2 = name1.replace("Hello","Howdy"); //find and replace println!("{}",name2); }
Выход
Вышеуказанная программа генерирует следующий вывод —
Howdy TutorialsPoint , Howdy!
Иллюстрация: as_str ()
Функция as_str () извлекает фрагмент строки, содержащий всю строку.
fn main() { let example_string = String::from("example_string"); print_literal(example_string.as_str()); } fn print_literal(data:&str ){ println!("displaying string literal {}",data); }
Выход
Вышеуказанная программа генерирует следующий вывод —
displaying string literal example_string
Иллюстрация: push ()
Функция push () добавляет указанный символ в конец этой строки.
fn main(){ let mut company = "Tutorial".to_string(); company.push('s'); println!("{}",company); }
Выход
Вышеуказанная программа генерирует следующий вывод —
Tutorials
Иллюстрация: push_str ()
Функция push_str () добавляет данный фрагмент строки в конец строки.
fn main(){ let mut company = "Tutorials".to_string(); company.push_str(" Point"); println!("{}",company); }
Выход
Вышеуказанная программа генерирует следующий вывод —
Tutorials Point
Иллюстрация: len ()
Функция len () возвращает общее количество символов в строке (включая пробелы).
fn main() { let fullname = " Tutorials Point"; println!("length is {}",fullname.len()); }
Выход
Вышеуказанная программа генерирует следующий вывод —
length is 20
Иллюстрация: отделка ()
Функция trim () удаляет начальные и конечные пробелы в строке. Обратите внимание, что эта функция не удалит встроенные пробелы.
fn main() { let fullname = " Tutorials Point \r\n"; println!("Before trim "); println!("length is {}",fullname.len()); println!(); println!("After trim "); println!("length is {}",fullname.trim().len()); }
Выход
Вышеуказанная программа генерирует следующий вывод —
Before trim length is 24 After trim length is 15
Иллюстрация: split_whitespace ()
Split_whitespace () разбивает входную строку на разные строки. Он возвращает итератор, поэтому мы перебираем токены, как показано ниже —
fn main(){ let msg = "Tutorials Point has good t utorials".to_string(); let mut i = 1; for token in msg.split_whitespace(){ println!("token {} {}",i,token); i+=1; } }
Выход
token 1 Tutorials token 2 Point token 3 has token 4 good token 5 tutorials
Иллюстрация: строка split ()
Метод строки split () возвращает итератор для подстрок фрагмента строки, разделенных символами, соответствующими шаблону. Ограничение метода split () состоит в том, что результат не может быть сохранен для дальнейшего использования. Метод collect может использоваться для хранения результата, возвращаемого split (), как вектора.
fn main() { let fullname = "Kannan,Sudhakaran,Tutorialspoint"; for token in fullname.split(","){ println!("token is {}",token); } //store in a Vector println!("\n"); let tokens:Vec<&str>= fullname.split(",").collect(); println!("firstName is {}",tokens[0]); println!("lastname is {}",tokens[1]); println!("company is {}",tokens[2]); }
Приведенный выше пример разбивает строку на полное имя всякий раз, когда встречается запятая (,) .
Выход
token is Kannan token is Sudhakaran token is Tutorialspoint firstName is Kannan lastname is Sudhakaran company is Tutorialspoint
Иллюстрация: символы ()
Отдельные символы в строке могут быть доступны с помощью метода chars. Давайте рассмотрим пример, чтобы понять это.
fn main(){ let n1 = "Tutorials".to_string(); for n in n1.chars(){ println!("{}",n); } }
Выход
T u t o r i a l s
Конкатенация строк с оператором +
Строковое значение может быть добавлено к другой строке. Это называется конкатенацией или интерполяцией. Результатом конкатенации строк является новый строковый объект. Оператор + внутренне использует метод add . Синтаксис функции add принимает два параметра. Первый параметр self — сам строковый объект, а второй параметр — ссылка на второй строковый объект. Это показано ниже —
//add function add(self,&str)->String { // returns a String object }
Иллюстрация: Конкатенация строк
fn main(){ let n1 = "Tutorials".to_string(); let n2 = "Point".to_string(); let n3 = n1 + &n2; // n2 reference is passed println!("{}",n3); }
Выход будет как указано ниже
TutorialsPoint
Иллюстрация: Тип литья
В следующем примере показано преобразование числа в строковый объект —
fn main(){ let number = 2020; let number_as_string = number.to_string(); // convert number to string println!("{}",number_as_string); println!("{}",number_as_string=="2020"); }
Выход будет как указано ниже
2020 true
Иллюстрация: формат! макрос
Еще один способ добавить к объектам String вместе — это использовать макро-функцию, называемую format. Использование формата! как показано ниже.
fn main(){ let n1 = "Tutorials".to_string(); let n2 = "Point".to_string(); let n3 = format!("{} {}",n1,n2); println!("{}",n3); }
Выход будет как указано ниже