Каков самый простой способ преобразования строки в верхний регистр в Rust?

Я искал, как вы конвертируете строку в верхний регистр в Rust. Самый оптимальный способ, который я догадался до сих пор, заключается в следующем:

let s = "smash";
let asc = s.to_ascii().to_upper();
println!("Hulk {:s}", asc.as_str_ascii());

Есть ли менее верный способ сделать это?

Примечание: Этот вопрос специально настроен на Rust 0.9. На момент запроса был другой ответ, но он был для Rust 0.8, который имеет значительные различия в синтаксисе и поэтому неприменим.

Ответ 1

Если вы используете тип std::string::String вместо &str, существует менее подробный способ. Дополнительное преимущество: поддержка Unicode и отсутствие необходимости импорта пакетов.

fn main() {
    let test_str = "übercode"; // type &str
    let test_string = test_str.to_string(); // type String

    let uppercase_test_string = test_string.to_uppercase(); // type String

    let uppercase_test_str = &*uppercase_test_string; // back to type &str

    println!{"{}", test_str};
    println!{"{}", uppercase_test_string};
    println!{"{}", uppercase_test_str};
}

Ответ 2

Я думаю, что самый простой способ - сделать это с помощью std::ascii::AsciiExt:

use std::ascii::AsciiExt;

fn main() {
   let r = "smash".to_ascii_uppercase();
   println!(" Hulk {:s}!", r); // Hulk SMASH!

   //or one liner 
   println!(" Hulk {:s}!", "smash".to_ascii_uppercase());
}