RCIE-ジャンクのコード屋

主に自分のためにコーディングのTIPSを蓄積しています。

Rust 文字列の長さ・分割・切り出し

概要

  • 文字列の操作方法を紹介する。
文字列の長さを求める
  • 文字列のまま操作する場合は chars().count()
  • 文字配列について操作する場合は len()
fn main() {
    let 文字列 = "あいうえおかきくけこさしすせそ";
    println!("{}", 文字列.chars().count());

    let 文字配列: Vec<char> = 文字列.chars().collect();
    println!("{}", 文字配列.len());
}
文字列を指定文字で分割する
  • つまり「aaa@bbb」を「@」で分割して「aaa」と「bbb」を得る操作。
  • 配列を得る場合には、すこし記述が長くなる。
fn main() {
    let 文字列 = "あいうえおかき-くけこさしすせそ";

    // 配列にする必要がある場合
    let 配列 = 文字列.split('-').fold(Vec::new(), |mut s, i| {
        s.push(i.to_string());
        s
    });
    println!("{:?}", 配列);

    // 配列にする必要がない場合
    for 分割 in 文字列.split('-') {
        println!("{}", 分割);
    }
}
文字列を切り出す
  • 「アイウエオ」の1~3を切り出すと「イウエ」
  • 短く表現したが、結構複雑なので関数にまとめた。
fn main() {
    let 文字列 = "あいうえおかきくけこさしすせそ";
    println!("{}", 切り出し(&文字列, 3, 5));
}

fn 切り出し(文字列: &str, 開始: usize, 終了: usize) -> String {
    let mut s = String::new();
    for i in 文字列.chars().enumerate() {
        match i.0 {
            n if n < 開始 => {continue}
            n if n > 終了 => {break}
            _ => {s.push(i.1)}
        }
    }
    s
}
補足
  • 1文字が1バイトだったり4バイトだったりするので、単純な操作もけっこう面倒である。