Rust 速習チュートリアル

Rust の文字列

1. 文字列 (Strings)

文字列はテキストデータを格納するために使用されます。
これまでに、&str型を使用して文字列を作成する方法を学習しました。

サンプルコード

let greeting: &str = "こんにちは";
println!("{}", greeting);

文字列はダブルクォート(" ")で囲まれる点に注意してください。

Rustには、主に2つの文字列型が存在します。

  • &str: 「ストリングスライス(string slices)」と呼ばれます。"Hello"のような固定テキスト(文字列リテラル)に使用されます。
  • String: 変更(更新)が必要な文字列を扱う場合に使用されます。

このチャプターでは、より柔軟で動的な操作が可能な String 型を中心に解説します。

2. Stringの作成

文字列リテラルから String を作成するには、to_string() メソッドまたは String::from() 関数を使用します。

サンプルコード

// to_string()を使用する場合
let text1 = "Hello World".to_string();

サンプルコード

// String::from()を使用する場合
let text2 = String::from("Hello World");

Rustではどちらの書き方も非常に一般的であり、どちらを選択するかは開発者の好みに委ねられます。

3. Stringの変更

String は「ミュータブル(変更可能)」なデータ型です。mut キーワードを付けて宣言することで、内容を変更できます。

push_str() を使用すると、文字列にテキストを追加できます。

サンプルコード

let mut greeting = String::from("Hello");
greeting.push_str(" World");
println!("{}", greeting); // 出力: Hello World

push() を使用すると、文字(char型)を1つ追加できます。

サンプルコード

let mut word = String::from("Hi");
word.push('!');
println!("{}", word); // 出力: Hi!

4. 文字列の連結 (Concatenate)

複数の文字列を結合するには、format! マクロを使用するのが最も便利です。

サンプルコード

let s1 = String::from("Hello");
let s2 = String::from("World!");
let s3 = String::from("なんて素晴らしい日だ!");

let result = format!("{} {} {}", s1, s2, s3);
println!("{}", result);

また、+ 演算子を使用して文字列を結合することもできますが、多くの値を扱う場合はコードが複雑になりがちです。

サンプルコード

let s1 = String::from("Hello");
let s2 = String::from("World!");
let s3 = String::from("なんて素晴らしい日だ!");

let result = s1 + " " + &s2 + " " + &s3;
println!("{}", result);

注記: + 演算子を使用する場合、String に追加できるのは &str のみです。そのため、ここでは &s2&s3 (ストリングスライスへの参照)を使用しています。

Tips: 文字列を連結する場合、一般的には + よりも format! マクロを使用する方が推奨されます。

5. 文字列の長さ (Length)

.len() メソッドを使用することで、文字列の長さを取得できます。

サンプルコード

let name = String::from("John");
println!("長さ: {}", name.len()); // 出力: 4