Rust 文字列を指定した区切り文字で区切って逆順にする

Rust 文字列を指定した区切り文字で区切って逆順にする

Rustで、文字列を指定した区切り文字で区切って逆順にするサンプルコードを記述してます。Rustのバージョンは1.62.1を使用してます。

環境

  • OS windows11 home
  • rustc 1.62.1

文字列を指定した区切り文字で区切って逆順にする

文字列を指定した区切り文字で区切って逆順にするには「rsplit(”).collect::>()」を使用します。

"文字列".rsplit('区切り文字').collect::<Vec<_>>();

実際に使用してみます。

fn main() {

    let mut str: String = "a-b-c".to_string();

    println!( "{:?}", str.rsplit('-').collect::<Vec<_>>()); // ["c", "b", "a"]
    println!( "{}", str ); // a-b-c

    str = "aaaabaca".to_string();
    
    println!( "{:?}", str.rsplit('a').collect::<Vec<_>>()); // ["", "c", "b", "", "", "", ""]
    println!( "{}", str ); // aaaabaca

}

実行結果を見ると、区切られて逆順になっていることが確認できます。

文字列の最後に区切り文字があり、空の値にしたくない場合は「rsplit_terminator」を使用します。

fn main() {

    let mut str: String = "a-b-c-".to_string();

    println!( "{:?}", str.rsplit('-').collect::<Vec<_>>()); // ["", "c", "b", "a"]
    println!( "{}", str ); // a-b-c-

    println!( "{:?}", str.rsplit_terminator("-").collect::<Vec<_>>()); // ["c", "b", "a"]
    println!( "{}", str ); // a-b-c-

}

存在しない区切り文字を指定

存在しない区切り文字を指定すると、1つのベクタが生成されます。

fn main() {

    let mut str: String = "a-b-c".to_string();

    println!( "{:?}", str.rsplit('A').collect::<Vec<_>>()); // ["a-b-c"]
    println!( "{}", str ); // a-b-c

}

空文字

空文字の場合は、空のベクタが生成されます。

fn main() {

    let mut str: String = "".to_string();

    println!( "{:?}", str.rsplit('A').collect::<Vec<_>>()); // [""]
    println!( "{}", str ); // a-b-c

}

日本語の場合

日本語の場合も動作します。

fn main() {

    let mut str: String = "あかいうかえ".to_string();

    println!( "{:?}", str.rsplit('か').collect::<Vec<_>>()); // ["え", "いう", "あ"]
    println!( "{}", str ); // あかいうかえ

}

サロゲートペアの場合

サロゲートペアの場合も、期待する動作になります。

fn main() {

    let mut str: String = "😇😶😻😇😶😻😇😶😻".to_string();

    println!( "{:?}", str.rsplit('😶').collect::<Vec<_>>()); // ["😻", "😻😇", "😻😇", "😇"]
    println!( "{}", str ); // 😇😶😻😇😶😻😇😶😻

}