字符串属性匹配检查及数组连续相同字符检测需求咨询
检测C#字符串数组中的连续相同字符块
没问题,我来帮你搞定这个连续字符块的检测需求。针对你提供的newChars数组(内容是P, P, P, B, B, T, T, T, P, P),我们可以用一个简单的遍历+跟踪的方式实现,代码清晰还高效。
先直接上可运行的代码示例:
string[] newChars = { "P", "P", "P", "B", "B", "T", "T", "T", "P", "P" }; // 先处理空数组的边界情况 if (newChars.Length == 0) { Console.WriteLine("数组为空,没有可检测的连续块"); return; } // 初始化当前跟踪的字符和连续计数 string currentChar = newChars[0]; int consecutiveCount = 1; // 从第二个元素开始遍历数组 for (int i = 1; i < newChars.Length; i++) { if (newChars[i] == currentChar) { // 字符没变化,计数加1 consecutiveCount++; } else { // 字符变了,输出当前的连续块信息 Console.WriteLine($"连续字符块: *{currentChar}*,连续出现 {consecutiveCount} 次"); // 更新跟踪的字符和计数,开始新的块 currentChar = newChars[i]; consecutiveCount = 1; } } // 别忘了输出最后一个连续块(循环里不会处理到它) Console.WriteLine($"连续字符块: *{currentChar}*,连续出现 {consecutiveCount} 次");
运行这段代码后,你会得到这样的输出:
连续字符块: P,连续出现 3 次
连续字符块: B,连续出现 2 次
连续字符块: T,连续出现 3 次
连续字符块: P,连续出现 2 次
代码逻辑解释
- 边界处理:先判断数组是否为空,避免后续遍历出现索引越界的问题。
- 初始化跟踪变量:用
currentChar记录当前正在跟踪的连续字符,consecutiveCount记录这个字符连续出现的次数,初始值设为数组第一个元素和1。 - 遍历数组:从第二个元素开始,每次和
currentChar对比:- 字符相同就累加计数;
- 字符不同就说明当前连续块结束,输出信息后更新跟踪变量,开始新的块。
- 处理最后一个块:循环结束后,最后一个连续块还没输出,所以要单独处理。
如果你需要把这些连续块的信息存储起来(比如后续要做其他处理),可以把结果放到一个自定义的集合里,比如用值元组列表:
// 定义一个列表来存储每个连续块的信息 List<(string Character, int Count)> consecutiveBlocks = new List<(string Character, int Count)>(); // ... 前面的空数组判断和初始化代码 for (int i = 1; i < newChars.Length; i++) { if (newChars[i] == currentChar) { consecutiveCount++; } else { consecutiveBlocks.Add((currentChar, consecutiveCount)); currentChar = newChars[i]; consecutiveCount = 1; } } // 添加最后一个块 consecutiveBlocks.Add((currentChar, consecutiveCount)); // 后续可以遍历这个列表做任何你需要的操作 foreach (var block in consecutiveBlocks) { Console.WriteLine($"字符 {block.Character} 连续出现了 {block.Count} 次"); }
这样就可以灵活地使用这些连续块的数据了。
内容的提问来源于stack exchange,提问作者Ginxxx
相关产品推荐
相关产品推荐

