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

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

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

環境

  • OS windows11 home
  • rustc 1.66.0

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

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

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

実際に使用してみます。

fn main() {

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

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

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

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

}

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

最大値を超えた場合は、最大値と同様の結果になります。

fn main() {

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

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

}

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

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

fn main() {

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

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

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

}

空文字

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

fn main() {

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

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

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

}

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

fn main() {

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

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

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

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

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

}