如何在 Rust 中删除字符串的第一个和最后一个字符?

Hen*_*nry 6 string rust

我想知道如何在 Rust 中删除字符串的第一个和最后一个字符。

例子:

输入:

"Hello World"

输出:

"ello Worl"

Kap*_*lan 23

\xe2\x80\xa6or 简单的解决方案
\n也适用于 Unicode 字符:

\n
let mut s = "Hello World".to_string();\ns.pop();      // remove last\nif s.len() > 0 {\n    s.remove(0);  // remove first\n}\n
Run Code Online (Sandbox Code Playgroud)\n


Hen*_*nry 22

我通过使用字符串切片来做到这一点。

fn main() {
    let string: &str = "Hello World";
    let first_last_off: &str = &string[1..string.len() - 1];
    println!("{}", first_last_off);
}
Run Code Online (Sandbox Code Playgroud)

我取出了字符串中的所有字符,直到字符串末尾 - 1。

  • 警告:此代码仅适用于 ASCII 字符,其中 1 个字符 = 1 个字节。如果您的字符串以 2 个或更多字节表示的 UTF-8 字符开头/结尾,则代码将会出现错误。 (7认同)

kmd*_*eko 9

您可以使用.chars()迭代器并忽略第一个和最后一个字符:

fn rem_first_and_last(value: &str) -> &str {
    let mut chars = value.chars();
    chars.next();
    chars.next_back();
    chars.as_str()
}
Run Code Online (Sandbox Code Playgroud)

它为零或一个大小的字符串返回一个空字符串,它将正确处理多字节 unicode 字符。看到它在操场上工作。

  • 与往常一样,在使用 unicode 时,值得记住字符和字素簇之间的区别。例如,在某些情况下,这将删除最后一个字形上的重音或更改复合表情符号,而不是删除整个簇。因此,虽然这满足了OP的要求,但实际上可能不是他们想要的。(更多的是对OP的警告,而不是对此答案的批评 - 正确处理字素簇是_棘手_且不平凡的) (3认同)
  • 这是我最喜欢的答案,因为它适用于多字节字符和空字符串。 (2认同)
  • @MichaelAnderson 绝对!我从来不知道 unicode 处理有多深入。对于更复杂的字形和表情符号,请将 `.chars()` 交换为 [`.graphemes(true)`](https://unicode-rs.github.io/unicode-segmentation/unicode_segmentation/trait.UnicodeSegmentation.html#tymethod .graphemes)来自[unicode分段](https://crates.io/crates/unicode-segmentation)板条箱可能是必要的。 (2认同)