Dev Study
← 解説「String — 伸長できる文字列」に戻る

サンプルコードで身につける: String — 伸長できる文字列

解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1push_str と push で伸ばす

String::from で作った文字列を、push_str(文字列の連結)と push(1文字の追加)で伸ばしていく最小例です。あとから内容が増えていくのが、リテラルの &str にはない String の特徴です。len() がバイト数を返すこともここで一度確認しておきます。

Rust

2format! で組み立てる

複数の値を埋め込んだ文字列を作るなら、push_str を重ねるより format! が読みやすく定番です。println! と同じ書式が使え、結果は新しい String として返ります。{:04} のような書式指定でゼロ埋めもでき、ID やメッセージの生成など実務での出番は非常に多いマクロです。

Rust

3&str で受けて String を返す

「読むだけの引数は &str、加工した結果は String」という実務の使い分けをそのまま関数にした例です。引数が &str なら、リテラルも &String も同じ関数に渡せます。中では to_string() で所有する String に変換してから push_str で加工しています。

Rust

4バイト数と文字数は別物

len() はバイト数を返すため、日本語の「こんにちは」は5文字なのに15バイトになります。文字単位で数えたいときは chars().count() を使い、1文字ずつ処理したいときは for c in s.chars() で回します。文字数制限のバリデーションなどで混同しやすい、実務で重要な区別です。

Rust

5部品をつないでCSVの行を作る

空の String::new() から始めて、ループで区切り文字と部品を push_str していく実務寄りの例です。「最初の要素の前にはカンマを置かない」という定番の条件分岐も入っています。CSV 行やパス、SQL のようなテキストの組み立ては、この形が基本になります。

Rust