Rust 文字列から先頭から文字数を指定して文字を削除する

Rust 文字列から先頭から文字数を指定して文字を削除する

Rustで、文字列から先頭から文字数を指定して文字を削除するサンプルコードを記述してます。「split_off()」に削除する文字数を指定することで可能です。Rustのバージョンは1.66.0を使用してます。

環境

  • OS windows11 home
  • rustc 1.66.0

文字列から先頭から文字数を指定して文字を削除する

文字列から先頭から文字数を指定して文字を削除するには「split_off()」を使用します。

"文字列".split_off( 先頭から削除する文字数 );

実際に使用してみます。

fn main() {

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

    println!( "{}", str.split_off(1) ); // bcde 
    println!( "{}", str ); // a

    str = "abcde".to_string();

    println!( "{}", str.split_off(2) ); // cde 
    println!( "{}", str ); // ab

}

実行結果を見ると、指定文字数分だけ文字が削除されていることが確認できます。

「0」を指定すると、全ての文字が削除されます。
fn main() {

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

    println!( "{}", str.split_off(0) ); // abcde 
    println!( "{}", str ); // 

}

また、文字数以上を指定するとエラーとなります。

fn main() {

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

    println!( "{}", str.split_off(6) );
    println!( "{}", str );

}

エラー全文

thread 'main' panicked at 'assertion failed: self.is_char_boundary(at)', /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3\library\alloc\src\string.rs:1677:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
error: process didn't exit successfully: `target\debug\rust_sample.exe` (exit code: 101)

日本語の場合

日本語の場合は、「3」単位で位置を指定します。

fn main() {

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

    println!( "{}", str.split_off(3) );
    // いうえお
    println!( "{}", str );
    // あ

    str = "あいうえお".to_string();

    println!( "{}", str.split_off(6) );
    // うえお
    println!( "{}", str );
    // あい

}

サロゲートペアの場合

サロゲートペアの場合は、「4」単位で位置を指定します。

fn main() {

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

    println!( "{}", str.split_off(4) );
    // 😶😻
    println!( "{}", str );
    // 😇

    str = "😇😶😻".to_string();

    println!( "{}", str.split_off(8) );
    // 😻
    println!( "{}", str );
    // 😇😶

}