Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
String::chars() / bytes() / parse()
Rustの文字列には『chars()』(Unicode文字のイテレータ)・『bytes()』(バイトのイテレータ)・『parse()』(文字列から数値への変換)などのメソッドがあります。大文字小文字変換も組み込みで対応しています。
構文
let s = String::from("Hello, 世界");
// Unicode文字のイテレータを返します。
for c in s.chars() { /* ... */ }
// バイトのイテレータを返します。
for b in s.bytes() { /* ... */ }
// 文字列を任意の型に変換します(型を明示します)。
let n: i32 = "42".parse().unwrap();
let f: f64 = "3.14".parse().unwrap();
// parse() の戻り値はResult型です。
let result: Result<i32, _> = "abc".parse();
match result {
Ok(n) => println!("数値: {}", n),
Err(e) => println!("変換失敗: {}", e),
}
// 大文字・小文字変換です。
let upper = s.to_uppercase();
let lower = s.to_lowercase();
メソッド一覧
| メソッド | 概要 |
|---|---|
| s.chars() | Unicode文字(char)のイテレータを返します。 |
| s.char_indices() | (バイトオフセット, char)のイテレータを返します。 |
| s.bytes() | UTF-8バイトのイテレータを返します。 |
| s.chars().count() | Unicode文字数を返します。 |
| s.chars().nth(n) | n番目のcharをOption<char>で返します。 |
| s.parse::<T>() | 文字列をT型に変換してResult<T, E>を返します。 |
| s.to_uppercase() | 大文字に変換した新しいStringを返します。 |
| s.to_lowercase() | 小文字に変換した新しいStringを返します。 |
| s.to_ascii_uppercase() | ASCII文字のみ大文字に変換します。 |
| s.to_ascii_lowercase() | ASCII文字のみ小文字に変換します。 |
| s.chars().collect::<String>() | charイテレータをStringに再構築します。 |
サンプルコード
fn main() {
let s = "Hello, 世界!";
// chars()でUnicode文字を一つずつ処理します。
println!("--- chars() ---");
println!("文字数: {}", s.chars().count());
println!("バイト数: {}", s.len());
let chars: Vec<char> = s.chars().collect();
println!("chars[0]: {}", chars[0]); // 'H'
println!("chars[7]: {}", chars[7]); // '世'
// char_indicesでオフセットと文字を同時に取得します。
println!("\n--- char_indices(最初の5文字)---");
for (i, c) in s.char_indices().take(5) {
println!(" オフセット={}, 文字='{}'", i, c);
}
// bytes()でバイト列を処理します。
println!("\n--- bytes(最初の5バイト)---");
let first5: Vec<u8> = s.bytes().take(5).collect();
println!(" {:?}", first5);
// parse()で文字列を数値に変換します。
println!("\n--- parse() ---");
let n: i32 = "42".parse().unwrap();
let f: f64 = "3.14".parse().unwrap();
println!("i32: {}", n);
println!("f64: {}", f);
// エラー処理つきのparse()です。
let inputs = ["100", "-5", "abc", "3.14"];
for input in inputs {
match input.parse::<i32>() {
Ok(n) => println!(" '{}' => i32: {}", input, n),
Err(e) => println!(" '{}' => エラー: {}", input, e),
}
}
// 大文字・小文字変換です。
println!("\n--- 大文字・小文字 ---");
let mixed = "Hello, World!";
println!("to_uppercase: {}", mixed.to_uppercase());
println!("to_lowercase: {}", mixed.to_lowercase());
// charsを使って各文字を変換する例です。
let reversed: String = mixed.chars().rev().collect();
println!("reversed: {}", reversed);
let only_alpha: String = mixed.chars().filter(|c| c.is_alphabetic()).collect();
println!("アルファベットのみ: {}", only_alpha);
}
概要
『chars()』はRustで文字列を1文字ずつ処理する基本的な方法です。Rustのchar型は4バイトのUnicodeスカラー値なので、日本語や絵文字も1文字として正しく扱えます。
『parse()』は型を推論または明示して文字列を変換します。戻り値は『Result』型なので、変換失敗時のエラーを安全に処理できます。型の指定は『"42".parse::<i32>()』のようにターボフィッシュ構文か変数の型アノテーションで行います。
chars()が返すイテレータはO(n)です。特定のn番目の文字を取得するs.chars().nth(n)は先頭からn文字分を走査するため、ランダムアクセスには向きません。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。