6

Как конкатенировать строки?

3

Вот описание проблемы для StackOverflow на русском языке:


Как мне конкатенировать следующие комбинации типов:

  • str и str
  • String и str
  • String и String

Если вам нужно больше деталей, дайте знать!

3 ответ(ов)

1

Чтобы объединить несколько строк в одну строку, разделенную другим символом, существует несколько способов.

Наиболее элегантный способ, который я видел, — это использование метода 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);
}

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

0

Конкатенация с помощью интерполяции строк

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", который предоставляет свой собственный способ интерполяции строк:

https://crates.io/crates/ifmt

0

Для конкатенации двух 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. Это также эффективно и удобно для работы со строковыми срезами.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь