Rust中解析字符串转数字时,如何让以0开头的字符串返回-1?
Rust 解析数字时排除以0开头的字符串
要实现仅解析不以0开头(或仅单独0)的字符串为数字,否则返回-1,可以先对字符串做前缀检查,再执行解析:
核心逻辑
- 若字符串长度大于1且以
'0'开头,直接返回-1(避免"01""001"这类被解析为1) - 否则尝试将字符串解析为数字,解析失败时也返回-1
代码实现
fn parse_valid_num(s: &str) -> i32 { // 过滤长度>1的前置0字符串 if s.len() > 1 && s.starts_with('0') { return -1; } // 解析数字,失败返回-1 s.parse().unwrap_or(-1) } // 测试验证 fn main() { assert_eq!(parse_valid_num("32"), 32); assert_eq!(parse_valid_num("28"), 28); assert_eq!(parse_valid_num("01"), -1); assert_eq!(parse_valid_num("001"), -1); assert_eq!(parse_valid_num("0"), 0); // 单独的0默认允许,若需禁用可修改判断条件 assert_eq!(parse_valid_num("abc"), -1); // 非法字符解析失败返回-1 }
自定义调整
如果需求中单独的"0"也需要返回-1,只需把判断条件修改为:
if s.starts_with('0') { return -1; }
内容的提问来源于stack exchange,提问作者Zullu Balti
相关产品推荐
相关产品推荐

