将char转换为大写

Moe*_*ius 11 rust

我有一个包含单个变量的变量char.我想将其转换char为大写.但是,该to_uppercase函数返回rustc_unicode::char::ToUppercase结构而不是a char.

Luk*_*odt 17

说明

ToUppercase是一个Iterator,可能会产生不止一个char.这是必要的,因为一些Unicode字符由多个"Unicode标量值"(Rust char表示)组成.

一个很好的例子就是所谓的连字.试试这个例子(在操场上):

let fi_upper: Vec<_> = '?'.to_uppercase().collect();
println!("{:?}", fi_upper);   // prints: ['F', 'I']
Run Code Online (Sandbox Code Playgroud)

'fi'连字是一个单一字符,其大写版本由两个字母/字符组成.


解

有多种可能性如何处理:

  1. 处理&str:如果您的数据实际上是字符串形式,请使用str::to_uppercase返回String更容易使用的数据.
  2. 使用ASCII方法:如果您确定您的数据只是ASCII和/或您不关心unicode符号,您可以使用std::ascii::AsciiExt::to_ascii_uppercase它返回一个char.但它只会改变字母'a'来'z'并忽略所有其他字符!
  3. 手动处理:在上面的示例中收集到String或Vec等.


Cec*_*rdo 9

ToUppercase是一个迭代器,因为可能有一些Unicode字符的大写版本,因为字符的大写版本可能由几个代码点组成,如注释中指向的delnan.您可以将其转换为字符向量:

c.to_uppercase().collect::<Vec<_>>();
Run Code Online (Sandbox Code Playgroud)

然后,你应该将这些字符收集到一个字符串中,就像ker指出的那样.

  • 咦?我认为它返回一个迭代器,因为*大写版本可能由几个代码点*组成,即使在选择一个特定的变量(根据文档,`to_uppercase`之后). (5认同)
  • 然后你只需要获取向量的第一个字符:https://play.rust-lang.org/?gist=cd2f82bd96c6ffa26ef1&amp;version=stable 对于这样一件微不足道的事情来说,这不是很臃肿吗? (2认同)