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

Dart用户输入转换报错:空字符串处理问题求助

解决Dart用户输入转换的报错问题

原代码的核心错误

  1. 赋值运算符误用:代码里的strNum == "0"是相等比较操作,而非赋值,导致空字符串的处理完全未生效,应改为strNum = "0"。
  2. 未处理null输入:stdin.readLineSync()可能返回null(比如用户按下Ctrl+D/Ctrl+Z触发EOF),直接用!强制拆分会触发空指针异常。
  3. 未处理非数字输入:int.parse遇到非数字字符串会抛出FormatException,int.tryParse会返回null,直接加!强制拆分会触发空指针。

修正后的完整代码

import 'dart:io';

void main() {
  print("Enter a number: ");
  String? strNum = stdin.readLineSync();
  
  // 统一处理null或空字符串的情况
  if (strNum == null || strNum.isEmpty) {
    strNum = "0";
  }
  
  // 安全转换数字,处理非有效数字输入
  int? num = int.tryParse(strNum);
  if (num == null) {
    print("输入不是有效的数字,默认使用0");
    num = 0;
  }
  
  int result = num + 10;
  print("The result is $result");
}

代码说明

  • 导入dart:io模块:这是使用stdin的必要前提,原代码可能遗漏了这一行。
  • 空值/空字符串处理:先判断输入是否为null或空字符串,统一设置为默认值"0"。
  • 安全数字转换:用int.tryParse替代int.parse,转换失败时返回null,此时给默认值0并提示用户。
  • 避免强制拆包:全程不使用!强制拆包,消除空指针和格式异常的风险。

原报错原因解析

  • 第一段代码的FormatException:因为空字符串未被正确赋值为"0",int.parse("")无法解析空字符串,抛出格式异常。
  • 第二段代码的空指针异常:如果stdin.readLineSync()返回null,strNum!强制拆包会触发空指针;同时int.tryParse(null)返回null,后续的!也会触发空指针。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 04:50:04