You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:46:30