You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解析合法整数字符串时为何出现ParseIntError { kind: InvalidDigit }?

错误原因与修复方案

错误原因

1. 无效字符触发解析失败

当某一行只有单个数字时(比如最后一行的7),你的代码里num2会保留初始值'\0'(空字符)。拼接后的字符串是"7\0",但trim()只会去除空格、换行这类空白字符,不会处理'\0'。尝试把这个字符串转成整数时,'\0'属于无效数字字符,直接触发ParseIntError panic。

2. 需求理解偏差

你的代码当前只提取每行的第一个和最后一个数字拼接,但实际需求是提取每行所有数字组成完整整数(比如第三行a1b2c3d4e5f要得到12345,而非15),这也导致结果根本不符合预期。

修复后的代码

直接遍历每行字符,收集所有数字再转成整数,逻辑更简洁也完全匹配需求:

use std::fs;

fn main() {
    let contents = fs::read_to_string("day1.txt").expect("Should have been able to read the file");
    let mut total = 0;

    for line in contents.lines() {
        // 收集当前行所有数字字符
        let digits: String = line.chars()
            .filter(|c| c.is_numeric())
            .collect();
        
        // 转成整数,空行默认按0处理(避免panic)
        let number: i32 = digits.parse().unwrap_or(0);
        total += number;
    }

    println!("{}", total);
}

关键改进点

  • 用filter+collect直接捞取所有数字字符,完美贴合提取所有数字的需求
  • 用unwrap_or(0)处理无数字的空行,不会因为意外情况panic
  • 删掉了固定长度的数组,避免文件行数变化时需要手动调整数组大小的麻烦

运行这段代码,输入你提供的测试文件,会输出预期的12402。

内容的提问来源于stack exchange,提问作者Jack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 11:37:26