rust - 如何在 Rust 中将字符串中的所有字符大写?

标签 rust

这里有一个关于如何将字符串中的 ASCII 字符大写的答案。这不足以解决我的具体问题。

最佳答案

对于任何在 Google 之外徘徊的人来说,自 Rust 0.13.0 以来,情况有所改善。 (我使用的是 Rust 1.13.0)

&str (字符串切片)提供 to_uppercase()你可以强制它做任何事情。

// First, with an &str, which any string can coerce to.
let str = "hello øåÅßç";
let up = str.to_uppercase();
println!("{}", up);

// And again with a String
let nonstatic_string = String::from(str);
let up2 = nonstatic_string.to_uppercase();
println!("{}", up2);
// ...if this fails in an edge case, use &nonstatic_string to force coercion

关于 Matthieu M. 的评论,此转换应完全符合 Unicode。

这是一个可运行的副本 on the Rust Playground

如果它能帮助新人理解发生了什么:

  1. String实现 Deref<Target=str> , 所以你可以调用任何 str String 上的方法.
  2. str::to_uppercase()需要 &str (一个借来的、不可变的切片。换句话说,一个对字符串的只读引用),所以它几乎可以接受任何东西。
  3. str::to_uppercase()分配一个新的 String并返回它,因此它的返回值不受输入借用规则的约束。

最后评论中提到的警告是,如果您调用 my_string.to_uppercase()作为str::to_uppercase(my_string) ,然后它会这样提示:

expected &str, found struct `std::string::String`

发生的事情是my_string.to_uppercase()实际上并不等同于...它等同于str::to_uppercase(&my_string) .

(如果您不是以引用开始,则无法自动取消引用。在进行方法调用时,您不需要提供 &,因为方法定义中的 &self 会为您完成.)

关于rust - 如何在 Rust 中将字符串中的所有字符大写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27222834/

相关文章:

rust - 用 Rust 定义一棵树

memory - 为什么结构在创建时共享相同的地址,而在删除时与创建的地址不同

rust - Rust 函数的返回类型中的闭包

dynamic - 是否可以将特征对象转换为另一个特征对象?

rust - 结构内 FnMut 字段参数的生命周期使用什么?

rust - 将集合移出上下文

rust - Rust 是否有用于创建带有附加元素的数组的语法糖?

reference - 遍历迭代器并改变值是否会更改集合中的值?

rust - 您将如何为包含闭包的结构创建构造函数?

file - 为什么文件需要可变才能调用 Read::read_to_string?