RUST 学习日记 第12课 ——字符串切片

102 阅读3分钟

// #![allow(unused_variables)]

// type File = String;

fn main() {

//练习1

// let mut f1 = File::from("f1.txt");

// open(&mut f1);

// //read(&mut f1,&mut vec![]);

// close(&mut f1);

//练习2

//字符串

// let my_name = "Pascal";

// greet(my_name);

// let s = String::from("hello world");

// let hello = &s[0..5];

// let world = &s[6..11];

// println!("s value is {}",s);

// println!("hello value is {}",hello);

// println!("world value is {}",world);

//练习2

// let s = String::from("hello world");

// //hello没有引用整个String s,而是引用了s的一部分

// let hello = &s[0..5];

// let world = &s[6..11];

// //从0开始索引

// let slice = &s[0..2];

// let slice = &s[..2];

// //切片包含最后一个字节

// let len = s.len();

// let slice = &s[4..len];

// let slice = &s[4..];

// //截取完整的String切片

// let slice = &s[0..len];

// let slice = &s[..];

// //中文切片

// //s只取前两个字节,本案例中每个汉字占用三个字节

// //切片没有落在边界处,此时程序会直接崩溃退出

// let s = "中国人";

// let a = &s[0..2];

//练习3

// let mut s = String::from("hello world");

// let word = first_words(&s);

// s.clear();

// println!("The first word is: {}",word);

//练习4

//集合的切片 切片是对集合的部分引用

// let a = [1, 2, 3, 4, 5];

// let slice = &a[1..3];

// assert_eq!(slice,&[2,3]);

//练习5

//字符串字面量

// let s = "Hello,world";

//练习6

//str类型是硬编码可执行文件,无法被修改

//String则是一个可增长,可改变且具有所有权的UTF-8编码字符串

//练习7

//String与&str的转换

// let s = String::from("hello,world");

// say_hello(&s);

// say_hello(&s[..]);

// say_hello(s.as_str());

//练习8

// let hello = String::from("中国人");

//练习9

//追加

// let mut s = String::from("Hello ");

// s.push_str("rust");

// println!("追加字符串 push_str() -> {}",s);

// s.push_str("!");

// println!("追加字符串 push_str() -> {}",s);

//练习10

//插入

// let mut s = String::from("Hello rust!");

// s.insert(5, ',');

// println!("插入字符 insert() -> {}",s);

// s.insert_str(6, "I like");

// println!("插入字符串 insert_str() -> {}",s);

//练习11

//替换

// let string_replace = String::from("I like rust.

// Learning rust is my favorite!");

// let new_string_replace = string_replace.replace("rust", "Rust");

// dbg!(new_string_replace);

//替换个数

// let new_string_replacen = string_replace.replacen("rust", "Rust", 1);

// dbg!(new_string_replacen);

//练习12

//替换范围

// let mut string_replace = String::from("I like rust.

// Learning rust is my favorite!");

// string_replace.replace_range(7..8, "R");

// dbg!(string_replace);

//练习13

//删除

//pop删除并返回字符串的最后一个字符安

//remove 删除并返回字符串中指定位置的字符

//truncate 删除字符串中从指定位置开始到结尾的全部字符

//clear 清空字符串

// let mut string_pop = String::from("rust pop 中文!");

// let p1 = string_pop.pop();

// let p2 = string_pop.pop();

// dbg!(p1);

// dbg!(p2);

// dbg!(string_pop);

// let mut string_remove = String::from("测试remove方法");

// println!("string_remove 占 {} 个字符",

// std::mem::size_of_val(string_remove.as_str()));

// let s1 = string_remove.remove(0);

// let s2 = string_remove.remove(3);

// dbg!(string_remove);

// string_remove.truncate(1);

// string_remove.clear();

//练习14

//清空字符串

// let mut string_clear = String::from("string clear");

// string_clear.clear();

// dbg!(string_clear);

//练习15

//连接Concatenate

// let string_append = String::from("hello ");

// let string_rust = String::from("rust");

// let result = string_append + &string_rust;

// let mut result = result +"!";

// result += "!!!";

// println!("连接字符串 + -> {}",result);

//练习16

// let s1 = String::from("hello,");

// let s2 = String::from("world!");

// let s3 = s1 + &s2;//实际上是调用String add方法,s1所有权已经发生转移

// assert_eq!(s3,"hello,world!");

// // println!("{}",s1);//报错

//练习17

// let s1 = "hello";

// let s2 = String::from("rust");

// let s = format!("{} {}!", s1, s2);

// println!("{}",s);

//练习18

//字符串转译

// let byte_escape = "I'm writing \x52\x75\x73\x74";

// println!("What are you doing\x3F (\x3F means ?) {}",byte_escape);

// let unicode_codepoint = "\u{211D}";

// let character_name = ""Doble-struck capital R"";

// println!(

// "Unicode character {} (U+211D) is called {}",

// unicode_codepoint, character_name

// );

// // 换行了也会保持之前的字符串格式

// // 使用\忽略换行符

// let long_string = "String literals

// can span multiple lines.

// The linebreak and indentation here ->\

// <- can be escaped too!";

// println!("{}", long_string);

//练习19

// println!("{}","hello \x52\x75\x73\x74");

// let raw_str = r"Escapes don't work here:\x3F \u{211D}";

// println!("{}",raw_str);

// let quotes = r#"And the I said:"There is no escapte""#;

// println!("{}",quotes);

// let longer_delimiter = r###"A string with "# in it. And even "##!"###;

// println!("{}", longer_delimiter);

//练习20

//字符串

// for c in "中国人".chars() {

// println!("{}",c);

// }

}

// fn say_hello(s: &str) {

// println!("{}", s);

// }

// fn first_words(s:&String) -> &str{

// &s[..1]

// }

// fn greet(name: String) {

// println!("Hello,{}!",name);

// }

// fn open(f: &mut File) -> bool {

// true

// }

// fn close(f: &mut File) -> bool {

// true

// }

// #[allow(dead_code)]

// fn read(f:&mut File,save_to:&mut Vec ) -> !{

// unimplemented!()

// } 源码地址