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
相关产品推荐
相关产品推荐

