Rust 将字符转换为大写

Rust 将字符转换为大写,rust,Rust,我有一个变量,它包含一个char。我想把这个char转换成大写。但是,to_uppercase函数返回一个rustc_unicode::char::ToUppercase结构,而不是charToUppercase是一个迭代器,因为字符的大写版本可能由多个代码点组成,正如delnan在注释中指出的那样。您可以将其转换为字符向量: c.to_uppercase().collect::<Vec<_>>(); c.to_大写().collect::(); 然后,您应该将这些字

我有一个变量,它包含一个
char
。我想把这个
char
转换成大写。但是,
to_uppercase
函数返回一个
rustc_unicode::char::ToUppercase
结构,而不是
char
ToUppercase
是一个迭代器,因为字符的大写版本可能由多个代码点组成,正如delnan在注释中指出的那样。您可以将其转换为字符向量:

c.to_uppercase().collect::<Vec<_>>();
c.to_大写().collect::();
然后,您应该将这些字符收集到一个字符串中,正如ker所指出的那样。

解释
ToUppercase
是一个
迭代器
,它可以生成多个
char
。这是必要的,因为某些Unicode字符由多个“Unicode标量值”(一个字符表示多个“Unicode标量值”)

一个很好的例子就是所谓的。试试这个例子():

让fi_upper:Vec='fi'。to_uppercase().collect();
普林顿!(“{:?}”,fi_上);//印刷品:['F','I']
“fi”连字是单个字符,其大写版本由两个字母/字符组成


解决方案 如何处理这一问题有多种可能性:

  • 处理
    &str
    :如果数据实际上是字符串形式,请使用它返回一个更易于处理的
    字符串
  • 使用ASCII方法:如果您确定数据仅为ASCII和/或不关心unicode符号,则可以使用仅返回字符的
    字符。但它只将字母
    'a'
    更改为
    'z'
    ,并忽略所有其他字符
  • 手动处理它:收集到一个
    字符串
    Vec
    中,如上例所示
    然后你只需要取向量的第一个字符:对于这样一件小事来说,这不是很夸张吗?不,我的答案是错误的。请阅读评论。这在某些情况下是可行的,但在一般情况下是不正确的。@LukasKalbertodt我自己无法回答这个问题。我还没有删除答案,因为评论包含有效信息。我应该删除它吗?@LukasKalbertodt:刚刚删除了。谢谢
    let fi_upper: Vec<_> = 'fi'.to_uppercase().collect();
    println!("{:?}", fi_upper);   // prints: ['F', 'I']