fn main() {
// 1. 创建字符串
let s1 = String::new();
let s2 = String::with_capacity(100);
let s3 = String::from("hello");
let s4 = "RUST".to_string();
let s5: String = "rust".into();
let s6 = "学习rust".repeat(2);
let s7 = String::from_utf8(vec![b'h', b'i']).unwrap();
println!("s7 = {}", s7); // hi
// 2. 长度
let len: usize = s6.len(); // 字节数
let char_count: usize = s6.chars().count();
let is_empty = s7.is_empty();
println!("s6 len({}), chars({}), is empty: {}", len, char_count, is_empty); // s6 len(20), chars(12), is empty: false
// 3. 包含、查找
let has_u: bool = s5.contains("u");
let starts: bool = s5.starts_with("ru");
let ends: bool = s5.ends_with("st");
let find_llo: Option<usize> = s3.find("llo"); // Some(2)
let find_l: Option<usize> = s3.rfind("l"); // Some(3)
println!("{}, {}, {}, {:?}, {:?}", has_u, starts, ends, find_llo, find_l); // true, true, true, Some(2), Some(3)
// 4. 比较
let eq_ignore_case = s4.eq_ignore_ascii_case("rust");
println!("{} = {} : {}", s4, "rust", eq_ignore_case); // RUST = rust : true
// 5. 修改
let mut s = String::from("hello");
s.push(','); // push char
s.push_str("Rust");
s.extend("字符串!".chars());
s.insert(5, ',');
s.insert_str(6, "world");
s.replace_range(0..2, "HEL");
let mut sp: String = s.replace("R", "r");
let right_char: Option<char> = sp.pop();
let src: char = s.remove(7);
sp.truncate(6);
println!("s: {s}\nsp: {sp}\nright_char:{right_char:?}, s remove char: {src}");
sp.retain(|c| c!='H');
println!("sp :{}", sp);
// s: HELllo,orld,Rust字符串!
// sp: HELllo
// right_char:Some('!'), s remove char: w
// sp :ELllo
let mut s8 = " rust!! ".to_string();
let trimed: &str = s8.trim();
let left_trimed: &str = s8.trim_start();
let right_trimed: &str = s8.trim_end();
let trimmed_matches: &str = s8.trim_matches(|c| c == '!' || c == ' ');
println!("trimed:{}, left_trimed:{}, right_trimed: {}, trimed_matched: {}", trimed, left_trimed, right_trimed, trimmed_matches);
// trimed:rust!!, left_trimed:rust!! , right_trimed: rust!!, trimed_matched: rust
}