|
|
|
@ -64,7 +64,7 @@ let slice = &s[0..2];
|
|
|
|
|
let slice = &s[..2];
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
同样的,如果你的切片想要包含 `String` 的最后一个字节,则可以这样使用:
|
|
|
|
|
同样的,如果你的切片想要包含 `String` 的最后一个字节,则可以这样使用:
|
|
|
|
|
|
|
|
|
|
```rust
|
|
|
|
|
let s = String::from("hello");
|
|
|
|
@ -86,7 +86,7 @@ let slice = &s[0..len];
|
|
|
|
|
let slice = &s[..];
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> 在对字符串使用切片语法时需要格外小心,切片的索引必须落在字符之间的边界位置,也就是 UTF-8 字符的边界,例如中文在 UTF-8 中占用三个字节,下面的代码就会崩溃:
|
|
|
|
|
> 在对字符串使用切片语法时需要格外小心,切片的索引必须落在字符之间的边界位置,也就是 UTF-8 字符的边界,例如中文在 UTF-8 中占用三个字节,下面的代码就会崩溃:
|
|
|
|
|
>
|
|
|
|
|
> ```rust
|
|
|
|
|
> let s = "中国人";
|
|
|
|
@ -204,7 +204,7 @@ fn say_hello(s: &str) {
|
|
|
|
|
|
|
|
|
|
## 字符串索引
|
|
|
|
|
|
|
|
|
|
在其它语言中,使用索引的方式访问字符串的某个字符或者子串是很正常的行为,但是在 Rust 中就会报错:
|
|
|
|
|
在其它语言中,使用索引的方式访问字符串的某个字符或者子串是很正常的行为,但是在 Rust 中就会报错:
|
|
|
|
|
|
|
|
|
|
```rust
|
|
|
|
|
let s1 = String::from("hello");
|
|
|
|
@ -607,7 +607,7 @@ fn main() {
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
当然,在某些情况下,可能你会希望保持字符串的原样,不要转义:
|
|
|
|
|
当然,在某些情况下,可能你会希望保持字符串的原样,不要转义:
|
|
|
|
|
```rust
|
|
|
|
|
fn main() {
|
|
|
|
|
println!("{}", "hello \\x52\\x75\\x73\\x74");
|
|
|
|
@ -675,7 +675,7 @@ for b in "中国人".bytes() {
|
|
|
|
|
想要准确的从 UTF-8 字符串中获取子串是较为复杂的事情,例如想要从 `holla中国人नमस्ते` 这种变长的字符串中取出某一个子串,使用标准库你是做不到的。
|
|
|
|
|
你需要在 `crates.io` 上搜索 `utf8` 来寻找想要的功能。
|
|
|
|
|
|
|
|
|
|
可以考虑尝试下这个库:[utf8_slice](https://crates.io/crates/utf8_slice)。
|
|
|
|
|
可以考虑尝试下这个库:[utf8_slice](https://crates.io/crates/utf8_slice)。
|
|
|
|
|
|
|
|
|
|
## 字符串深度剖析
|
|
|
|
|
|
|
|
|
|