Как конкатенировать строки?
Вот описание проблемы для StackOverflow на русском языке:
Как мне конкатенировать следующие комбинации типов:
str
иstr
String
иstr
String
иString
Если вам нужно больше деталей, дайте знать!
3 ответ(ов)
Чтобы объединить несколько строк в одну строку, разделенную другим символом, существует несколько способов.
Наиболее элегантный способ, который я видел, — это использование метода join
для массива:
fn main() {
let a = "Hello";
let b = "world";
let result = [a, b].join("\n");
print!("{}", result);
}
В зависимости от вашего случая использования, вы можете предпочесть больше контроля:
fn main() {
let a = "Hello";
let b = "world";
let result = format!("{}\n{}", a, b);
print!("{}", result);
}
Существуют и более ручные способы, которые я встречал, некоторые из которых позволяют избежать одной или двух аллокаций. Однако для целей читаемости я считаю, что вышеупомянутые два метода вполне достаточны.
Конкатенация с помощью интерполяции строк
UPDATE: На 28 декабря 2021 года эта возможность доступна в Rust 1.58 Beta. Вам больше не нужно использовать ночную сборку Rust для выполнения интерполяции строк. (Оставляю остальную часть ответа без изменений для истории).
RFC 2795, выпущенный 27 октября 2019 года: Предлагает поддержку неявных аргументов для выполнения того, что многие люди знают как "интерполяция строк" — способ встраивания аргументов в строку для их конкатенации.
RFC: https://rust-lang.github.io/rfcs/2795-format-args-implicit-identifiers.html
Последнее состояние вопроса можно найти здесь: https://github.com/rust-lang/rust/issues/67984
На момент написания этого текста (24 сентября 2020 года) я полагаю, что эта функция должна быть доступна в ночной сборке Rust.
Это позволит вам конкатенировать строки с помощью следующего сокращённого синтаксиса:
format_args!("hello {person}")
Это эквивалентно следующему:
format_args!("hello {person}", person=person)
Также существует crate "ifmt", который предоставляет свой собственный способ интерполяции строк:
Для конкатенации двух String
в Rust вы можете использовать следующий код:
fn concat_string(a: String, b: String) -> String {
a + &b
}
В этом примере мы принимаем два значения типа String
и соединяем их с помощью оператора +
. Обратите внимание, что мы передаем ссылку на b
, используя &b
, поскольку оператор +
требует, чтобы вторым операндом была ссылка на строку.
Для конкатенации двух строковых срезов (&str
) можно воспользоваться следующим способом:
fn concat_str(a: &str, b: &str) -> String {
a.to_string() + b
}
Здесь мы принимаем два значения типа &str
и преобразуем первое значение в String
с помощью метода to_string()
, затем соединяем его со вторым срезом b
. Это также эффективно и удобно для работы со строковыми срезами.
Объединение двух столбцов текста в DataFrame pandas
Как эффективно объединять строки в Go
Почему сравнение строк с помощью '==' и 'is' иногда дает разные результаты?
Как проверить, содержит ли строка подстроку?
Функции startsWith() и endsWith() в PHP