C#中判断指定字符是否连续重复出现的实现方案
解决思路:判断序列中是否存在连续重复的指定字符
嘿,这个问题我太懂了!你现在用Count()只能统计目标字符的总数,完全没法区分是分散的还是连续的,咱们得换个核心思路——检查序列里有没有至少一对相邻的目标字符,下面给你几个实用的实现方案:
方案1:手动遍历(最直观、高效)
这种方法直接遍历序列,逐个检查相邻的两个字符,一旦找到连续的目标字符就立刻返回true,不用遍历完整个序列,性能拉满:
public static bool HasConsecutiveTargetChar(IEnumerable<char> sequence, char target) { using var enumerator = sequence.GetEnumerator(); // 先获取第一个字符 if (!enumerator.MoveNext()) return false; char previous = enumerator.Current; while (enumerator.MoveNext()) { char current = enumerator.Current; if (previous == target && current == target) { return true; } previous = current; } return false; }
如果你的输入是字符串(比如示例里的"::NWAVE12345"),还可以简化成更针对字符串的版本:
public static bool HasConsecutiveColons(string input) { for (int i = 0; i < input.Length - 1; i++) { if (input[i] == ':' && input[i+1] == ':') return true; } return false; }
方案2:LINQ 一行流(简洁优雅)
用LINQ的Zip()方法把原序列和跳过第一个元素的序列配对,然后检查是否有配对的两个元素都是目标字符:
// 针对你的场景,检查是否有连续冒号 bool hasConsecutiveColons = sensor.Zip(sensor.Skip(1), (prev, curr) => prev == ':' && curr == ':').Any(match => match);
这个写法很简洁,适合喜欢LINQ风格的开发者,本质和手动遍历逻辑一致,只是用LINQ封装了一下。
方案3:正则表达式(灵活通用)
如果以后需要匹配更多连续次数(比如3个、4个冒号),正则表达式会非常方便,直接匹配连续的目标字符即可:
using System.Text.RegularExpressions; // 匹配两个连续的冒号 bool hasConsecutiveColons = Regex.IsMatch(sensor, "::"); // 如果要匹配3个及以上连续冒号,可以改成 "::+"
这几个方案都能完美解决你的问题,根据你的代码风格和场景选就行~
内容的提问来源于stack exchange,提问作者Csibi Norbert
相关产品推荐
相关产品推荐

