如何大写Rust中字符串中的所有字符?

时间:2014-12-01 06:28:14

标签: rust

这里有一个答案,说明如何将字符串中的ASCII字符大写。这对我的具体问题来说还不够。

2 个答案:

答案 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

如果它有助于新手了解正在发生的事情:

  1. String实施Deref<Target=str>,因此您可以在str上调用任何String方法。
  2. str::to_uppercase()接受&str(一个借用的,不可变的切片。换句话说,是对字符串的只读引用),所以它几乎可以接受任何内容。
  3. str::to_uppercase()分配一个新的String并返回它,因此其返回值不受输入借用规则的约束。
  4. 最后评论中提到的警告是,如果您将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特征maplet 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}}

上进行测试