如何用C#筛选数组中含2-4个e/E且不含r的城镇名称
解决方案
核心筛选逻辑
要找出符合要求的城镇名称,需同时满足两个判断条件:
- 名称中(不区分大小写)包含 2、3或4个 字母
e/E - 名称中(不区分大小写)完全不含字母
r/R
代码实现
以下提供两种C#实现方式,可根据自身需求选择:
方式1:LINQ查询(简洁高效)
using System; using System.Linq; class Program { static void Main() { // 替换为你已定义的50个城镇数组 string[] city = new string[50] { "New York", "Seattle", "Boston", "Denver", "Erie", "Memphis", "Keene", "Greenville" }; // 筛选符合条件的城镇 var filteredCities = city.Where(cityName => // 统计e/E的数量,判断是否在2-4区间 cityName.Count(ch => char.ToLower(ch) == 'e') is >=2 and <=4 // 检查是否不含r/R && !cityName.Any(ch => char.ToLower(ch) == 'r') ); // 输出结果 foreach (var name in filteredCities) { Console.WriteLine(name); } } }
方式2:循环遍历(直观易懂)
using System; class Program { static void Main() { string[] city = new string[50] { "New York", "Seattle", "Boston", "Denver", "Erie", "Memphis", "Keene", "Greenville" }; foreach (string cityName in city) { int eCount = 0; bool hasR = false; // 逐个字符检查 foreach (char ch in cityName) { char lowerCh = char.ToLower(ch); if (lowerCh == 'e') { eCount++; } else if (lowerCh == 'r') { hasR = true; // 发现r后直接终止当前城镇的检查 break; } } // 符合条件则输出 if (!hasR && eCount >= 2 && eCount <= 4) { Console.WriteLine(cityName); } } } }
关键细节说明
char.ToLower(ch):统一转换为小写,避免大小写差异导致的判断错误- 循环方式中,一旦发现
r就提前终止检查,减少不必要的计算 - LINQ方式利用
Where、Count、Any方法简化代码,适合有基础的开发者快速实现
内容的提问来源于stack exchange,提问作者Sevinch
相关产品推荐
相关产品推荐

