Dart中统计字符串指定字符出现次数的实现方法
Dart中统计字符串指定字符出现次数的实现方法
嘿,刚入门Dart遇到这种字符串处理问题太正常啦!我给你分享几种实用的方法,帮你统计指定字符在字符串里的出现次数,就拿你说的统计'e'的次数举例~
方法一:手动遍历计数(最直观,适合新手理解)
这种方法就是逐个检查字符串里的每个字符,匹配到目标字符就累加计数,逻辑非常清晰,适合刚学Dart的朋友理解底层逻辑:
// 定义统计函数 int countTargetChar(String inputStr, String targetChar) { int count = 0; // 遍历字符串的每个字符 for (int i = 0; i < inputStr.length; i++) { if (inputStr[i] == targetChar) { count++; } } return count; } // 调用示例 void main() { String testWord = "Hello, everyone!"; int eCount = countTargetChar(testWord, 'e'); print("字符'e'出现的次数:$eCount"); // 输出:字符'e'出现的次数:4 }
方法二:利用split方法快速实现(简洁高效)
Dart的字符串自带split方法,我们可以用目标字符作为分隔符把字符串拆分成数组,数组的长度减一就是目标字符的出现次数,代码非常简洁:
int countTargetCharWithSplit(String inputStr, String targetChar) { return inputStr.split(targetChar).length - 1; } // 调用示例 void main() { String testWord = "Hello, everyone!"; print("字符'e'出现的次数:${countTargetCharWithSplit(testWord, 'e')}"); // 输出4 }
原理很简单:用'e'分割"Hello, everyone!"会得到["H", "llo, ", "v", "ryon", "!"],数组长度是5,减1就得到'e'的出现次数4。
方法三:正则表达式匹配(适合复杂场景)
如果需要更灵活的匹配规则(比如忽略大小写、匹配特殊字符),正则表达式会是很好的选择:
int countTargetCharWithRegex(String inputStr, String targetChar) { // 用RegExp.escape处理目标字符,避免正则特殊字符(比如*.+等)干扰 RegExp charRegex = RegExp(RegExp.escape(targetChar)); // 找到所有匹配的结果 Iterable<Match> matches = charRegex.allMatches(inputStr); return matches.length; } // 调用示例 void main() { String testWord = "Hello, Everyone!"; // 如果要忽略大小写统计,只需要给正则加caseSensitive: false参数 RegExp caseInsensitiveRegex = RegExp(RegExp.escape('e'), caseSensitive: false); int totalECount = caseInsensitiveRegex.allMatches(testWord).length; print("大小写'e'总共出现的次数:$totalECount"); // 输出5 }
小提示
如果需要忽略大小写统计字符,比如同时统计'E'和'e',可以:
- 方法一里把判断条件改成
inputStr[i].toLowerCase() == targetChar.toLowerCase() - 方法三里给正则表达式添加
caseSensitive: false参数
备注:内容来源于stack exchange,提问作者Okan Dağdelen




