在Dart中提取字符串数字及处理带附加内容的数值转换问题
在Dart中提取字符串中的数字并转为整数
看起来你已经尝试了替换操作,但问题出在正则表达式的使用方式上——Dart里直接用字符串作为replaceAll的第一个参数不会被解析为正则规则,得用RegExp对象才行。另外我们还需要处理掉那些额外的文本(比如+ applicable taxes),最后把提取到的数字转成整数。
我给你两种方案,按需选择:
方案一:通用提取所有数字(推荐)
这种方法不管字符串前缀是Rs.还是其他,也不管后面跟着什么额外文本,直接提取所有数字字符,然后转成整数,兼容性更强:
for (var t in creditcards) { String rawText = t['firstyear'].toString(); // 用正则匹配所有非数字字符,替换为空串 String numStr = rawText.replaceAll(RegExp(r'[^0-9]'), ''); // 安全解析为整数(避免空字符串或非数字导致的异常) int? amount = int.tryParse(numStr); if (amount != null) { print(amount); } else { // 处理无法解析的情况,比如原文本没有数字 print(0); // 或者根据你的需求自定义处理逻辑 } }
方案二:更精确的文本清理
如果你想先针对性去掉Rs.前缀和+ ...后缀,再提取数字,可以这么做,逻辑更明确:
for (var t in creditcards) { String rawText = t['firstyear'].toString(); // 第一步:去掉开头的Rs.前缀 String withoutPrefix = rawText.replaceFirst(RegExp(r'^Rs\.'), ''); // 第二步:以' + '分割,取前面的部分(去掉后面的税费文本) String mainPart = withoutPrefix.split(' + ')[0]; // 第三步:确保只保留数字 String numStr = mainPart.replaceAll(RegExp(r'[^0-9]'), ''); // 解析为整数,失败时默认输出0 int? amount = int.tryParse(numStr); print(amount ?? 0); }
为什么你的原代码不生效?
你原代码里用了replaceAll('/[^0-9]/', ''),这里的'/[^0-9]/'是一个普通字符串,Dart会尝试替换所有字面量为/[^0-9]/的子串,而不是把它当作正则表达式。正确的做法是用RegExp(r'[^0-9]')来创建正则对象,这样才能匹配所有非数字字符。
内容的提问来源于stack exchange,提问作者AZZAM JAFRI
相关产品推荐
相关产品推荐

