这里有一个关于如何将字符串中的 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
如果它能帮助新人理解发生了什么:
-
String
实现Deref<Target=str>
, 所以你可以调用任何str
String
上的方法. -
str::to_uppercase()
需要&str
(一个借来的、不可变的切片。换句话说,一个对字符串的只读引用),所以它几乎可以接受任何东西。 -
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/