Rustの文字列操作|便利なメソッドと使い方

先生

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: 123

format!マクロを使うと、複数の値を組み合わせて文字列を作成できます。

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: false

cmpメソッドは、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の文字列操作をマスターして、より高度なプログラミングに挑戦しましょう。