
Rustの文字列操作、String型と&str型の違いを理解して、文字列を自由自在に操ろう!
Rustの文字列操作:基本とString型
Rustにおける文字列操作は、他の言語とは少し異なる点があります。それは、Rustが所有権という概念を持っているからです。文字列を扱う際には、String型と&str型の区別を理解することが重要です。
String型は、ヒープ上に確保された可変長の文字列です。一方、&str型は文字列スライスで、String型への参照や、静的に確保された文字列リテラルを指します。
String型は、文字列を所有しているため、変更や追加が可能です。&str型は、文字列への参照であるため、変更はできません。
let mut s = String::from("hello");
s.push_str(", world!");
println!("{}", s); // Output: hello, world!上記の例では、String::from関数を使ってString型を作成し、push_strメソッドを使って文字列を追加しています。
文字列の生成と変換
Rustで文字列を生成する方法はいくつかあります。
// 文字列リテラルからString型を作成
let s1 = String::from("hello");
let s2 = "world".to_string();
// &strからStringへの変換
let s3: &str = "example";
let s4 = s3.to_string();
let s5 = String::from(s3);また、数値を文字列に変換することもできます。
let num = 123;
let num_str = num.to_string();
println!("{}", num_str); // Output: 123format!マクロを使うと、複数の値を組み合わせて文字列を作成できます。
let name = "Alice";
let age = 30;
let message = format!("My name is {} and I am {} years old.", name, age);
println!("{}", message); // Output: My name is Alice and I am 30 years old.便利な文字列操作メソッド
RustのString型には、様々な便利なメソッドが用意されています。
文字列の長さを取得するには、lenメソッドを使います。
let s = String::from("hello");
let len = s.len();
println!("{}", len); // Output: 5文字列が空かどうかを判定するには、is_emptyメソッドを使います。
let s = String::from("");
let is_empty = s.is_empty();
println!("{}", is_empty); // Output: true文字列を分割するには、splitメソッドを使います。
let s = String::from("hello,world");
for part in s.split(',') {
println!("{}", part);
}
// Output:
// hello
// world文字列をトリムするには、trimメソッドを使います。
let s = String::from(" hello ");
let trimmed = s.trim();
println!("{}", trimmed); // Output: hello文字列を置換するには、replaceメソッドを使います。
let s = String::from("hello world");
let replaced = s.replace("world", "Rust");
println!("{}", replaced); // Output: hello Rust文字列を大文字または小文字に変換するには、to_uppercaseメソッドまたはto_lowercaseメソッドを使います。
let s = String::from("Hello");
let uppercase = s.to_uppercase();
let lowercase = s.to_lowercase();
println!("{}", uppercase); // Output: HELLO
println!("{}", lowercase); // Output: hello文字列の比較
Rustで文字列を比較するには、==演算子またはcmpメソッドを使用します。
let s1 = String::from("hello");
let s2 = String::from("hello");
let s3 = String::from("world");
println!("{}", s1 == s2); // Output: true
println!("{}", s1 == s3); // Output: falsecmpメソッドは、Ordering型を返します。Ordering型は、Less、Equal、Greaterのいずれかの値を取ります。
use std::cmp::Ordering;
let s1 = String::from("apple");
let s2 = String::from("banana");
match s1.cmp(&s2) {
Ordering::Less => println!("apple is less than banana"),
Ordering::Equal => println!("apple is equal to banana"),
Ordering::Greater => println!("apple is greater than banana"),
}文字列スライス(&str)同士の比較も同様に行えます。
参考リンク
まとめ
Rustの文字列操作は、String型と&str型の区別、そして所有権の概念を理解することが重要です。様々なメソッドを使いこなすことで、効率的な文字列操作が可能になります。Rustの文字列操作をマスターして、より高度なプログラミングに挑戦しましょう。

