这里有一个答案,说明如何将字符串中的ASCII字符大写。这对我的具体问题来说还不够。
答案 0 :(得分:6)
对于任何在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
为你做。)
答案 1 :(得分:3)
我认为没有任何功能可以直接执行,但您可以使用chars
特征map
和let str = "hello øåÅßç";
let up = str.chars().map(|c| c.to_uppercase()).collect::<String>();
println!("{}", up);
中的功能,例如:
HELLO ØÅÅßÇ
输出:
rustc 0.13.0-dev (66601647c 2014-11-27 06:41:17 +0000)
在{{1}}
上进行测试