如何编写Dart函数实现字符串按4字符分块且末尾无连字符?
Dart字符串按每4字符分组并添加连字符的实现
正确实现代码
循环截取法(直观易读)
String splitStringIntoBlocks(String input) { final blocks = <String>[]; for (var i = 0; i < input.length; i += 4) { final end = i + 4 > input.length ? input.length : i + 4; blocks.add(input.substring(i, end)); } return blocks.join('-'); }
正则表达式法(简洁高效)
String splitStringIntoBlocks(String input) { return input.replaceAllMapped( RegExp(r'.{1,4}'), (match) => match.group(0)!, ).join('-'); }
测试验证
- 输入
"tgifzero"→ 返回"tgif-zero" - 输入
"234567890123"→ 返回"2345-6789-0123" - 输入空字符串 → 返回空字符串
- 输入不足4字符的字符串(如
"abc")→ 返回原字符串
为什么之前用split方法不行?
split方法是基于指定分隔符拆分字符串,而我们的需求是按固定长度拆分,两者逻辑完全不匹配。你之前得到错误结果,就是因为用了不符合需求的拆分逻辑,导致分组长度混乱。
上面两种方法都是先把字符串拆分成符合要求的子串列表,再用join('-')连接——这种方式天然避免了末尾出现多余连字符的问题,因为join只会在列表元素之间添加分隔符。
内容的提问来源于stack exchange,提问作者Eleburuike
相关产品推荐
相关产品推荐

