Rust 後方から文字列を指定した回数で区切り文字で区切って分割する

Rust 後方から文字列を指定した回数で区切り文字で区切って分割する

Rustで、後方から文字列を指定した回数で区切り文字で区切って分割するサンプルコードを記述してます。Rustのバージョンは1.66.0を使用してます。

環境

  • OS windows11 home
  • rustc 1.66.0

後方から文字列を指定した回数で区切り文字で区切って分割する

文字列を指定した回数で区切り文字で区切って分割するには「rsplitn().collect::<Vec<_>>()」を使用します。

"文字列".rsplitn( 回数, "区切り文字" ).collect::<Vec<_>>()

実際に使用してみます。

fn main() {

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

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

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

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

}

実行結果を見ると、後方から指定した回数で分割されていることが確認できます。

区切り文字の最大値を超えた場合は、全て最大値と同じになります。

fn main() {

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

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

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

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

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

fn main() {

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

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

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

}

空文字

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

fn main() {

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

    println!( "{:?}", str.rsplitn( 1, "," ).collect::<Vec<_>>()); // [""]
    println!( "{}", str ); //

    println!( "{:?}", str.rsplitn( 2, "," ).collect::<Vec<_>>()); // [""]
    println!( "{}", str ); //

}

区切り文字に空文字を指定すると、一文字ずつ区切られていきます。

fn main() {

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

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

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

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

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

}