Rust で文字列を連結する

Nilesh Katuwal 2023年6月21日
  1. concat!() マクロを使用して Rust で文字列を連結する
  2. Rust で concat() メソッドを使用して文字列を連結する
  3. Rust で所有文字列と借用文字列を使用して文字列を連結する
Rust で文字列を連結する

この記事では、Rust で文字列を連結する方法を示します。

concat!() マクロを使用して Rust で文字列を連結する

concat!() は、2つの文字列を静的な文字列に連結するために使用される Rust のマクロと見なされます。 複数のコンマ区切りのリテラルが必要であり、その式の型は &'static str です。

コード例:

fn main() {
    println!("{}", concat!("bat", "man"))
}

出力:

batman

Rust で concat() メソッドを使用して文字列を連結する

Rust の concat() メソッドは、T 型のスライスを U 型の単一の値にフラット化するために使用されます。 ベクトル内にある場合は、concat() 関数を使用して文字列を連結できます。

ベクトルは、このアプローチを使用して単一の文字列値に展開されます。

コード例:

fn main() {
    let v = vec!["bat", "man"];
    let s: String = v.concat();
    println!("{}", s);
}

出力:

batman

Rust で所有文字列と借用文字列を使用して文字列を連結する

文字列の連結の結果を格納するためのメモリを割り当てる必要があります。 使用している方法が最初の文字列を連結文字列に変更することである場合、最初の文字列は所有された文字列のみである必要があります。

ただし、文字列が連結されているが変更されていない場合、文字列は所有文字列または借用文字列のいずれか、または両方の文字列の混合である可能性があります。

Rust で所有文字列を作成するには、以下のコード例のように to_owned を使用する必要があります。

let os: String = "Welcome".to_owned();

お借りした紐はこんな感じ。

let bs: &str = "Home";

最初の文字列のコード例が変更され、連結された文字列は次のようになります。

fn main() {
    let mut os: String = "Hello ".to_owned();
    let bs: &str = "World";

    os.push_str(bs);
    println!("{}", os);
}

出力:

Hello World

ここでは、所有された文字列があるため、文字列を変更できます。 これは、メモリ割り当てを再利用できるため、効率的な方法と見なされます。

同様のケースは、&string のように StringString に利用でき、&str として逆参照できます。

コード例:

fn main() {
    let mut os: String = "Welcome".to_owned();
    let second_os: String = "Home".to_owned();

    os.push_str(&second_os);
    println!("{}", os);
}

出力:

WelcomeHome

以下で使用するコード例は、両方の文字列を借用したものです。

コード例:

fn main() {
    let bs1: &str = "Welcome";
    let bs2: &str = "Home";

    let together = format!("{}{}", bs1, bs2);

    println!("{}", together);
}

出力:

WelcomeHome

関連記事 - Rust String