Rust读取txt文件数字转u16存入Vec时报Result无parse方法错误如何解决
Rust读取文本数字转u16集合报错修复方案
错误根因
BufReader::lines() 返回的迭代器元素类型是 Result<String, std::io::Error>,你在map闭包里拿到的x还未处理IO层面的错误,属于Result枚举类型,并不是字符串本身,自然不存在parse方法。
修复方案
写法1:简易调试版(IO/格式出错直接panic,适合小工具/本地测试场景)
use std::fs; use std::io::{BufRead, BufReader}; fn main() { let file_in = fs::File::open("input.txt").unwrap(); let file_reader = BufReader::new(file_in); let vec: Vec<u16> = file_reader .lines() // 先 unwrap 处理IO层Result拿到字符串,再做数字解析 .map(|line_res| line_res.unwrap().parse::<u16>().unwrap()) .collect(); }
写法2:生产健壮版(完整错误处理,不会直接崩溃)
use std::fs; use std::io::{BufRead, BufReader}; use std::error::Error; fn main() -> Result<(), Box<dyn Error>> { let file_in = fs::File::open("input.txt")?; let file_reader = BufReader::new(file_in); // 直接collect可以自动聚合迭代过程中所有Result的错误 let vec: Result<Vec<u16>, _> = file_reader .lines() .map(|line_res| { let line = line_res?; Ok(line.parse::<u16>()?) }) .collect(); let vec = vec?; // 此处可写后续业务逻辑 Ok(()) }
补充说明
- 以上写法默认文本每行仅存储一个数字,如果单行存在多个数字,需要先对字符串做分割处理再逐个解析
parse方法返回的Result会处理字符串格式不匹配、数值超出u16取值范围的异常,生产环境不要随意省略错误处理逻辑
内容的提问来源于stack exchange,提问作者Nicke7117
相关产品推荐
相关产品推荐

