字符串
字符串常量
let str1 = "hello world"; // 字符串常量 "hello world"
let str2 = "hello
world"; // 字符串常量 "hello\nworld"
let str3 = "foo\
bar"; // 字符串常量 "foobar"
符号'\'会去除掉除符号后面所有的空格与换行符。
字符串类型
Rust中有两种常用的字符串相关类型String与&str。
String 类型
表示字符串,这是一个堆上分配的对象,本质是一个字节vector,所以String是可以增加的。
let mut s:String = String::new(); // 分配一个字符串
let alice = String::from("I like dogs"); // 堆上创建一个字符串。
&str 类型
表示字符串切片。
fn say_hello(s:&str){
println!("hello:{}",s);
}
fn main(){
let s = "world";
say_hello(s); // 打印 hello:world
}
&'static str类型
即字符串常量,同样也是&str,只是声明周期被标记为'static。'static 表示该资源的生命周期与整个程序是一致的。
let hw = "hello world"; // hw变量也是一种&str,生命周期为'static 。
String与&str相互转换
&str->String
let hw = String::from("hello world");
let mut s = "Hello".to_string();
println!("{}",s);
String->&str
String可以通过&强制转换为&str:
let hw = String::from("hello world");
let s1 = &hw; // 转换
// 或
let s2 = &hw[..]
字符串转字节数组
let s = "hello"; // 或 "hello".to_string();
let bytes = s.as_bytes(); // 数组
println!("x = {:?}", bytes); // 输出 x = [104, 101, 108, 108, 111]
遍历字符串
let s = "hello"; // 或 "hello".to_string();
for c in s.chars() {
println!("{}", c);
}
字符串连接
String连接&str
使用 '+' 号:
let hello = "hello ".to_string();
let world = "world!";
let hw = hello + world
使用 push_str() 方法:
let mut s = "hello".to_string();
s.push_str(" world");
println!("{}",s);
String连接String
需要先把后一个String转换为&str
let hello = "Hello ".to_string();
let world = "world!".to_string();
let hello_world = hello + &world;
字符串长度
使用如下方法获取字符串长度:
fn len(&self) -> usize
例:
let a = String::from("foo");
let len = a.len();
assert_eq!(a, 3);
更多字符串方法请参考:https://doc.rust-lang.org/std/string/struct.String.html