Dart如何将逗号添加到字符串编号

Ale*_* L. 6 regex string masking dart

我正在尝试改编:将 逗号插入数字字符串 以在飞镖中工作,但没有运气.

其中一个不起作用:

print("1000200".replaceAllMapped(new RegExp(r'/(\d)(?=(\d{3})+$)'), (match m) => "${m},"));
print("1000300".replaceAll(new RegExp(r'/\d{1,3}(?=(\d{3})+(?!\d))/g'), (match m) => "$m,"));
Run Code Online (Sandbox Code Playgroud)

是否有更简单/有效的方法将逗号添加到字符串数字?

小智 15

import \'package:intl/intl.dart\';\n\nvar f = NumberFormat("###,###.0#", "en_US");\nprint(f.format(int.parse("1000300")));\n
Run Code Online (Sandbox Code Playgroud)\n

打印 1,000,300.0\n在此处检查 dart\ 的NumberFormat

\n

该格式被指定为使用 ICU 格式化模式的子集的模式。

\n
    \n
  • 0 一位数
  • \n
  • #单个数字,如果值为零则省略
  • \n
  • 。小数点分隔符
  • \n
  • -减号
  • \n
  • , 分组分隔符
  • \n
  • E 分隔尾数和指数
  • \n
  • + -在指数之前,表示它应该以加号为前缀。
  • \n
  • % - 在前缀或后缀中,乘以 100 并显示为百分比
  • \n
  • \xe2\x80\xb0 (\\u2030) 在前缀或后缀中,乘以 1000,并显示为千分之一
  • \n
  • \xc2\xa4 (\\u00A4) 货币符号,替换为货币名称
  • \n
  • \' 用于引用特殊字符
  • \n
  • ; 用于分隔正负模式(如果两者都存在)
  • \n
\n


kel*_*orm 10

你只是忘了把第一个数字变成组.使用这个短的:

'12345kWh'.replaceAllMapped(new RegExp(r'(\d{1,3})(?=(\d{3})+(?!\d))'), (Match m) => '${m[1]},')
Run Code Online (Sandbox Code Playgroud)

看看可读的版本.在表达式的最后部分,我添加了对任何非数字字符的检查,包括字符串结束,因此您也可以使用'12瓦'.

RegExp reg = new RegExp(r'(\d{1,3})(?=(\d{3})+(?!\d))');
Function mathFunc = (Match match) => '${match[1]},';

List<String> tests = [
  '0',
  '10',
  '123',
  '1230',
  '12300',
  '123040',
  '12k',
  '12 ',
];

tests.forEach((String test) {
  String result = test.replaceAllMapped(reg, mathFunc);
  print('$test -> $result');
});
Run Code Online (Sandbox Code Playgroud)

它完美地运作:

0 -> 0
10 -> 10
123 -> 123
1230 -> 1,230
12300 -> 12,300
123040 -> 123,040
12k -> 12k
12  -> 12 
Run Code Online (Sandbox Code Playgroud)

  • 凯勒葛姆,太棒了!太感谢了!那行得通。这是我的工作代码:`print("1000200".replaceAllMapped(new RegExp(r'(\d{1,3})(?=(\d{3})+(?!\d))'), (匹配 m) =&gt; "${m[1]},"));` (2认同)