Rust中如何将分割后的&str转为String存入HashMap
将字符串切片转为String存入HashMap<String, String>的解决方案
针对你遇到的类型不匹配问题,只需要将分割得到的&str类型通过to_string()或into()方法转换为拥有所有权的String即可,无需修改HashMap的目标类型。
完整代码示例
use std::collections::HashMap; fn main() { let input = r#"atp.Status="draft";pureMM.maxOccurs="1";pureMM.minOccurs="1";xml.attribute="true""#; let mut result_map = HashMap::new(); // 按分号分割每个键值对 for key_value_pair in input.split(';') { // 按等号分割键和值,处理可能的分割失败情况 if let Some((key, value)) = key_value_pair.split_once('=') { // 将字符串切片转为String存入HashMap result_map.insert(key.to_string(), value.to_string()); // 也可以用into()方法,效果完全相同 // result_map.insert(key.into(), value.into()); } } // 打印验证结果 for (k, v) in result_map { println!("{}: {}", k, v); } }
关键说明
split(';')和split_once('=')返回的都是字符串切片(&str),这类引用类型无法直接存入要求String类型的HashMap,必须转换为拥有所有权的String。split_once比split更适合处理键值对场景,它会直接返回第一个等号分割后的键值结果,避免处理多余的分割元素。- 使用
if let可以安全处理分割失败的情况(比如某个片段没有等号),防止程序panic。
内容的提问来源于stack exchange,提问作者matti
相关产品推荐
相关产品推荐

