在Rust中使用字符串主要有两种类型:String
和字符串切片&str
。String
是一个可增长的、可变的、有所有权的UTF-8字符序列,而&str
通常指的是字符串的一个不可变引用。
创建字符串
-
直接创建:
rustlet mut s = String::new(); // 创建一个空的String let data = "initial contents"; let s = data.to_string(); // 从&str转换到String let s = "initial contents".to_string(); // 直接转换字面量 let s = String::from("initial contents"); // 使用String::from函数
-
通过格式化创建:
rustlet s = format!("{} {}", "Hello", "world"); // 结果是 "Hello world"
修改字符串
String
可以被修改,而&str
则不能。
-
增加内容:
rustlet mut s = String::from("foo"); s.push_str("bar"); // s现在是 "foobar" s.push('!'); // s现在是 "foobar!"
-
使用
+
运算符或format!
宏拼接:rustlet mut s1 = String::from("Hello"); let s2 = " World"; s1 = s1 + s2; // 注意s1在此操作后被移动了 // 使用format!更加灵活 let s1 = String::from("Hello"); let s2 = " World"; let s3 = format!("{}{}", s1, s2); // s1和s2不会被移动
-
替换、删除与修改:
rustlet mut s = String::from("Hello"); s.replace("Hello", "Goodbye"); // 替换 s.pop(); // 删除最后一个字符
索引和切片
Rust中的字符串索引处理比较严格,以防止在字符边界上出错。
-
字符串切片:
rustlet s = String::from("hello"); let slice = &s[0..2]; // 切片,slice为"he"
-
遍历字符串:
rustfor c in "नमस्ते".chars() { print!("{} ", c); } // 或者 for b in "नमस्ते".bytes() { print!("{} ", b); }
总的来说,在Rust中处理字符串时,需要考虑所有权、可变性以及UTF-8编码的规则,确保代码安全且高效。
2024年8月7日 15:23 回复