t_wの輪郭

Feedlyでフォローするボタン
Rust文字列コレクション

String

2022/2/18 21:34:00

Rustの文字列オブジェクト
文字のコレクション

+演算子によるStringとStringの結合+演算子による文字列の結合RustのStringを走査formatpush_strclonecontents+演算子によるStringとu32の結合(無理)演算子またはformatマクロで連結String::new()文字列リテラルからString型を生成linesto_lowercaseStringの難しさStringはVec<u8>のラッパString::fromRustの文字列操作to_string()

lines

2022/2/24 8:56:00

文字列を行ごとに繰り返すメソッド

let s = String::from("\
Rust:
safe, fast, productive.
Pick three.");
for line in s.lines() {
    println!("{}", line);
}

to_lowercase

2022/2/24 8:55:00

文字列を小文字にするメソッド

assert_eq!("Rust".to_lowercase(), "rust");
assert_eq!(String::from("Rust").to_lowercase(), String::from("rust"));

contents

2022/2/24 8:37:00

文字列にクエリ文字列を含むか確認するメソッド

let s = String::from("safe, fast, productive.");
println!("{}", s.contains("duct"));   //true
let s = "safe, fast, productive.";
println!("{}", s.contains("duct"));   //true

RustのStringを走査

2022/2/19 16:53:00
fn main() {
    let s = String::from("こんにちは世界");
    for b in s.chars() {
        println!("{}", b);
    }
}
こ
ん
に
ち
は
世
界

String&strの結合

fn main() {
    let s1 = String::from("Hello, ");
    let s2:&str = "world!";
    let s3 = s1 + &s2;      // s1はs3へ所有権が移動し、使用できなくなる
    println!("{}", s3);     // Hello, world!
}

Stringu32の結合

+演算子では不可能。formatを使おう。

fn main() {
    let s1 = String::from("Hello, ");
    let s2 = 1234;
    let s3 = s1 + &s2;      // error!!!
    println!("{}", s3);     
}
error[E0308]: mismatched types
 --> src\main.rs:4:19
  |
4 |     let s3 = s1 + &s2;      // error!!!
  |                   ^^^ expected `str`, found integer
  |
  = note: expected reference `&str`
             found reference `&{integer}`

StringStringの結合

fn main() {
    let s1 = String::from("Hello, ");
    let s2 = String::from("world!");
    let s3 = s1 + &s2;      // s1はs3へ所有権が移動し、使用できなくなる
    println!("{}", s3);     // Hello, world!
}

参照外し型強制という仕組みによってうまく動いているらしい。
勉強したら追記する

format

2022/2/19 15:00:00

文字列といろんなものを結合できるすごい関数マクロ
Displayが実装されていればなんでも結合できる気がする(要検証)


StringStringの結合

let hello:String = String::from("hello");
let world:String = String::from("world");
let hello_world = format!("{} {}", hello, world);
println!("{}", hello_world);   //hello world

String文字列リテラル&str)の結合

let hello:String = String::from("hello");
let world:&str = "world";
let hello_world = format!("{} {}", hello, world);
println!("{}", hello_world);   //hello world

String整数型u32)の結合

let hello:String = String::from("hello");
let number:u32 = 1234;
let hello_number = format!("{} {}", hello, number);
println!("{}", hello_number);   //hello 1234

push_str

2022/2/19 14:54:00

String文字列リテラル(&str)を追加する関数

fn main() {
    let mut string = String::new();
    println!("{}", string);     //

    string.push_str("hello");
    println!("{}", string);     //hello

    let s : &str = " world";
    string.push_str(s);
    println!("{}", string);     //hello world
}

Stringは追加できない。エラーになる。StringStringを追加(というか結合)したいときはformatを使おう。

追加元の変数にはmutをつけておく必要がある。変更されるので。

to_string()

2022/2/19 14:35:00

Display特性のメソッド
Stringを生成する

fn main() {
    let s : &str = "Hello, world";
    let string1 = s.to_string();
    let string2 = "world hello".to_string();
    let i = 1;
    let string3 = i.to_string();
    let string4 = 2.to_string();
    println!("{}", string1);      //Hello, world
    println!("{}", string2);      //world hello
    println!("{}", string3);      //1
    println!("{}", string4);      //2
}

String::from

2022/2/19 14:22:00

文字列リテラルからStringを生成する関数

fn main() {
    let s : &str = "Hello, world";
    let string1 = String::from(s);
    let string2 = String::from("world hello");
    println!("{}", string1);      //Hello, world
    println!("{}", string2);      //world hello
}

clone

2022/2/17 1:01:00

deep copyするメソッド

let s1 = String::from("hello");
let s2 = s1.clone();