Rustの文字列関数

プログラムを書く上で文字列の扱いは非常に重要です。
他のプログラミング言語で簡単に出来ていた文字列処理を、
Rustでもできるように基本的な文字列関数をまとめました。

文字列生成


一番基本的な方法


初期化をしてそれを後で使用するなどしたい場合はnewを使います。
例えばこんな具合に。

長さを取得


文字列の長さを取得したい場合ももちろんあります。
Rustにはそのための関数が用意されています。


長さとは違う話かもしれません。
with_capacityを使うことで文字列が使うバッファーを前もって割り当てることができます。


これをして何の意味があるのか。
どうも再割り当てを防ぐためらしいです。
文字列連結などで文字数が増える場合、その分だけ文字列が使うメモリを増やさなければいけません。
前もってバッファを割り当てておけばこの処理を省くことができるという魂胆のようです。

連結、拡張


様々な方法の文字列連結があります。
これはstring型にstr型を連結するサンプルです。


stringとstringを連結する場合、これとは方法が少し違います。


+演算子で連結できます。
その場合連結元には&をつけ参照を渡します。
この例では変数s3に結果を渡しています。
ちなみにここで変数sのリソースの所有権がs3に渡ったためこの処理の後、
変数sを使うことはできません。
幸いなことに変数s2は使えます。


push_strで連結したい場合、string型をstr型に変換する必要があります。

分裂


rustには文字列を配列(vec)にしてくれる関数が用意されています。


最も基本的な分裂関数はsplitです。
デリミタを渡します。
返り値はSplit型なのでcollectでvecに変換しています。

ちなみにrsplitというものもありまして、
こちらは文字列を逆から分解していくものです。

また分解数を指定することもできます。


ここでは分解数を2にしています。
その結果文字列は「rust」と「string sample program」にわけられます。
一回だけ分解したい場合などにも使えそうですね。

検索

検索です。


検索対象の文字列にパターンが含まれいる場合、
その場所(インデックス)を返してくれます。
返ってくる型はoption型なのでunwrapする必要があります。
上の例ではunwrap関数で開けてますが、
これだとマッチしていない場合パニックを起こしプログラムが終了します。
この辺りはいろいろ対策をする必要があるかと思います。

またマッチした文字列すべてを取得することもできます。


matchesにパターンを渡します。
返ってくるのはMatchesです。
先の例と同じようにcollectを使いvecに変換しています。
vec(ここでは変数v)にはパターンにマッチした文字列すべてが格納されています。


文字列がパターンにマッチした場所を得ることもできます。


マッチした文字列とともに文字列が見つかった場所(インデックス)が返ってきます。

置換


文字列置換です。


replace関数に置換対象文字列と置換文字列を渡します。

また置換する回数を指定することもできます。

まとめ


Rustには他にも文字列関数が用意されています。
nightlyでしか使えないものもあるようです。
ただ上にあげた関数だけでも多くのことができそうですね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です