字符串篇
字符串String与字符串切片&str
字符串 分配在堆内存中,大小可以增长push_str()
‘&str’ 字符串切片,用&[u8]来表示指向utf-8序列,使用&str字符串切片可以查看字符串中存在的数据–遍历字符串。
字符串是可变的引用,而&str是不可变的引用,即,字符串可以被更改,追加,但是&str不可以往里面追加数据或者更改里面原有的数据。
字符串包含其数据的所有权,而&str没有所有权,它是从另一个变量借用而来。
声明字符串的两种方式
//String::new()
let mut a = String::new();
a.pust_str("Hello World");
println!("{}",a);
let mut b = String::from("Hello Rust!");
println!("{}",b);
追加字符串
push_str(&str);
push(char);
let mut a = String::from("Hello ");
a.push_str("World!");
println!("{}",a);
字符串与字符串切片的互相转换
String > slice:&[u8] 使用as_bytes()
&str > slice:&[u8] 使用as_bytes()
u8 > char 使用 u8 as char
String > &str 使用&s[…] 或者 s.as_str()
&str > String 使用 s.to_string()
// String > &str
let a :String = String::from("Hello World!");
let b:&str = &a[..]; //字符串转换为&str 方法一
let b_2:&str = a.as_str();
//&str > String
let c = "Hello World";
let d = c.to_string(); //字符串切片转换为String
//String > slice:&[u8]
let ee = String::from("Hello 世界");
let bb:&[u8] = ee.as_bytes();
println!("as_bytes():\n");
for i in bb{
println!("{}",i);
}
//u8 > char
let de = b'A';
let de_str = de as char;
println!("de_str : {}",de_str);
字符串切片/切割字符串
let s = "Hello World";
let a = &s[1..4];
println!("{}",a);
输出 ell
遍历字符串
//以单字节的形式遍历字符串
fn each_str(s: &str){
for i in s.chars(){
//do something
print!("{}",i);
}
}
//以bytes的形式遍历
let c = "Hello World";
let d = b.bytes();
for i in d{
print!("{},",i)
}