← 中文资源

简体中文版本

Rust: 字符串中找到非法数字字符

修复 Rust 解析错误 invalid digit found in string 与 cannot parse integer:输入含空白、符号或非数字字符。

阅读英文原文

症状

解析失败并报 ParseIntError { kind: InvalidDigit } 或 cannot parse integer from empty string。可见值往往看似数字,说明其中存在隐藏字符。

诊断

用 debug 格式打印以暴露空白:

let raw = "42\n";
println!("{raw:?}");          // "42\n"
let n: i64 = raw.trim().parse()?;

若涉及十六进制等,检查进制。

修复

去除首尾空白并选择正确进制:

let n: i64 = raw.trim().parse()?;
let hex = i64::from_str_radix("ff", 16)?; // 255

当来源混入千位分隔符时,解析前先做规范化。

验证

用原输入重跑,解析成功。补一个断言 " 42\n".trim().parse::<i64>() == Ok(42) 的单元测试,把去空白的必要性固化下来。