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

Dart语言中字符串数字求和时if条件过滤报错求助

解决Dart中字符串字符比较的错误问题

错误原因

Dart里name[i]返回的是单个字符串(String类型),而>=、<=运算符无法直接用于String类型的比较,这就是报错的核心原因。要判断字符是否为数字,需要先获取字符对应的Unicode码点(数字字符'0'-'9'的码点范围是48到57),或者尝试将字符转为整数来验证。

修正方案1:通过字符码点比较

使用codeUnitAt(0)获取单个字符的Unicode码值,再与'0'、'9'的码值做范围判断:

String name = 'saran7711@7';
print(name);

int length = name.length;
int store = 0;

for (int i = 0; i < length; i++) {
  int charCode = name.codeUnitAt(i);
  // 数字'0'的码点是48,'9'是57
  if (charCode >= '0'.codeUnitAt(0) && charCode <= '9'.codeUnitAt(0)) {
      store += int.parse(name[i]);
  }
}

print(store); // 输出:7+7+1+1+7=23

修正方案2:用int.tryParse判断数字

更简洁的方式是尝试将单个字符转为整数,转换成功则说明是数字:

String name = 'saran7711@7';
print(name);

int store = 0;

for (var char in name.runes.map((r) => String.fromCharCode(r))) {
  int? num = int.tryParse(char);
  if (num != null) {
      store += num;
  }
}

print(store); // 输出23

也可以用更紧凑的链式写法:

String name = 'saran7711@7';
int store = name.runes
    .map((r) => String.fromCharCode(r))
    .map((char) => int.tryParse(char))
    .whereType<int>()
    .fold(0, (sum, num) => sum + num);

print(store); // 输出23

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:17:34