Avatar ·

为什么在 Rust 中将字符串的第一个字母大写是一个如此不平凡的任务?

大家好! 我最近开始学习 Rust,从 Python 和 JavaScript 转过来。在那些语言中,一切都很简单:`"hello".capitalize()` 或 `str[0].toUpperCase() + str.slice(1)`。但在 Rust 中,我遇到了即使像将字符串的第一个字母大写这样的基本操作,也需要大费周章。 我写了这样的代码: ```rust fn capitalize_first(s: &str) -> String { let mut chars = s.chars(); match chars.next() { Some(first) => first.to_uppercase().to_string() + chars.as_str(), None => String::new(), } } fn main() { println!("{}", capitalize_first("hello")); // 想要 "Hello" println!("{}", capitalize_first("привет")); // 想要 "Привет" } ``` 乍一看,一切正常。但当我尝试处理字符串 `"straße"`(德语单词“街道”)时,我得到了 `"Straße"`,而我期望的是 `"Straße"`(在德语中,ß 大写时会变成 SS,字符串长度会改变!)。而如果我传递 emoji 或带重音符号的字符...