Rust 文字列から指定した文字列が後方から検索して最初に見つかった位置を取得する

Rust 文字列から指定した文字列が後方から検索して最初に見つかった位置を取得する

Rustで、文字列から指定した文字列が後方から検索して最初に見つかった位置を取得するサンプルコードを記述してます。「rfind()」で可能です。Rustのバージョンは1.66.0を使用してます。

環境

  • OS windows11 home
  • rustc 1.66.0

文字列から指定した文字列が後方から検索して最初に見つかった位置を取得

文字列から指定した文字列が後方から検索して最初に見つかった位置を取得するには「rfind()」を使用します。
※位置は「0」から開始されます。

"文字列".rfind("文字列")

実際に使用してみます。

fn main() {

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

    println!( "{:?}", str.rfind('a')  ); // Some(5)
    println!( "{:?}", str.rfind('b')  ); // Some(6)
    println!( "{:?}", str.rfind('c')  ); // Some(7)
    println!( "{:?}", str.rfind("cd")  ); // Some(2)
    println!( "{:?}", str.rfind("f")  ); // None

}

実行結果を見ると、取得されていることが確認できます。

日本語

日本語の場合は、1文字が「3」とカウントされます。

fn main() {

    let mut str: String = "あいうえおあいう".to_string();
    
    println!( "{:?}", str.rfind('あ')  ); // Some(15)
    println!( "{:?}", str.rfind('い')  ); // Some(18)
    println!( "{:?}", str.rfind('う')  ); // Some(21)
    println!( "{:?}", str.rfind("うえ")  ); // Some(6)
    println!( "{:?}", str.rfind("か")  ); // None

}

サロゲートペア

通常の2バイトで1文字で表すところを、4バイトで1文字となるサロゲートペア文字だと1文字が「4」とカウントされます。

fn main() {

    let mut str: String = "😇😈😉😊😋😇😈😉".to_string();

    println!( "{:?}", str.rfind('😇')  ); // Some(20)
    println!( "{:?}", str.rfind('😈')  ); // Some(24)
    println!( "{:?}", str.rfind('😉')  ); // Some(28)
    println!( "{:?}", str.rfind("😉😊")  ); // Some(8)
    println!( "{:?}", str.rfind("🙆")  ); // None

}

空文字

空文字を検索すると、最後の文字の位置「+1」が返ります。
空文字から空文字を検索すると「0」が返ります。

fn main() {

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

    println!( "{:?}", str.find("")  ); // Some(0)

    str = "".to_string();

    println!( "{:?}", str.find("")  ); // Some(0)

}