我有一个看似简单的问题,即从 Rust 中的字符串中提取第一个和最后一个字母数字字符。请考虑下面我的简约示例:
fn main() {
let s: String = "Peace to the world!".to_string();
// check: string is not empty
if !s.is_empty() {
let s = s.to_uppercase();
let fidx = s.find(char::is_alphanumeric).unwrap();
println!("fidx: {fidx}");
let fchar = s.get(fidx..fidx).unwrap();
println!("fchar: {fchar}");
let lidx = s.rfind(char::is_alphanumeric).unwrap();
println!("lidx: {lidx}");
let lchar = s.get(lidx..lidx).unwrap();
println!("lchar: {lchar}");
}
}
fchar
我的代码为和返回空字符lchar
。如何从字符串中获取这些字符?您也请检查我的代码吗?我不确定这是最短、最优雅的解决方案。
fidx..fidx
始终为空,因为第二个值是排除的。您可能打算使用包含范围:
但从技术上讲,这并不会为您提供第一个字符,而是为您提供
&str
第一个字符的 a,并且仅当它的 UTF-8 表示形式恰好为 1 个字节宽时才有效。因此,如果您不需要索引,您可以
char
直接使用以下命令获取第一个满足条件的索引:或者同时使用以下命令:
注意:
.char_indices()
为您提供一个字节索引和相应字符的迭代器,这就是您的代码计算的内容。如果您在寻找字符索引,则可以将其替换为.chars().enumerate()
对于最后一个,只需替换
find
为rfind
: