创建String
fn main() {
// 创建一个空字符串
let mut s = String::new();
s.push_str("rust");
println!("{}", s);
// 创建带初始值的字符串
let mut s = String::from("rust");
println!("{}", s);
// 根据字面量创建字符串
let mut s = "rust".to_string();
println!("{}", s);
}
更新String
fn main() {
let mut s1 = String::new();
// append一个字符串
s1.push_str("tea");
// append一个字符
s1.push('m');
println!("s1 = {}",s1);
// 字符串拼接
let mut s2 = String::from(" member");
let s3 = s1 + &s2; // s1的所有权转移给了s3,s1不能再使用
println!("s3 = {}",s3);
// 格式化字符串
let s1 = "hello".to_string();
let s2 = ",world".to_string();
let s3 = format!("{},{}",s1,s2);
println!("s3 = {}",s3);
}
字符串索引
字符串不支持直接通过索引小标的方式获取字符,我们可以通过slice的方式获取,或者通过for循环遍历
fn main() {
let s = String::from("hello");
// 通过slice的方式访问其中某个字符
let sub_s = &s[0..=0];
println!("sub: {}",sub_s); // h
// 遍历每一个字符
for char in s.chars() {
println!("当前字符: {}",char);
}
// 遍历每一个字节
for byte in s.bytes(){
println!("当前字节: {}",byte);
}
}
如果字符串中有汉字,使用slice的方式获取需要注意,一个汉字占三个字节,所以第一个汉字的有效范围是 [0,3)
,第二个汉字的有效范围是[3,6)
,对此Rust官方不建议使用此种方式去获取其中某个字符。我们可以通过for循环遍历加字符串实例自身的chars()
方法去确保我们获取到是预期的数据。
fn main() {
// *********特殊情况*********
let s = String::from("你好");
let sub_s = &s[0..=2]; // 你
println!("sub: {}",sub_s);
let sub_s = &s[3..=5]; // 好
println!("sub: {}",sub_s);
// 遍历每一个字符
for char in s.chars() {
println!("当前字符: {}",char);
}
}