在C#中仅使用System命名空间,如何根据起始字符统计指定单词的字符数?
解决C#仅用System命名空间处理字符串的问题
嘿,刚好我之前也处理过类似的需求,咱们一步步来搞定:
一、实现你的核心需求
你的思路完全没问题——拆分单词、筛选符合开头字符的单词、统计后续字符数。因为要求仅用System命名空间,咱们用string自带的方法就能搞定,不需要额外依赖。
代码实现
using System; class StringProcessor { static void Main() { string input = "the weather outside is beautiful"; char targetStartChar = 'o'; // 拆分字符串为单词数组(自动忽略多余空格) string[] words = input.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries); // 找到以目标字符开头的唯一单词(假设输入中只有一个符合项) string targetWord = Array.Find(words, word => word.StartsWith(targetStartChar.ToString(), StringComparison.OrdinalIgnoreCase)); if (targetWord != null) { // 起始字符后的字符数 = 单词总长度 - 1(减去开头的目标字符) int charCount = targetWord.Length - 1; Console.WriteLine($"找到的单词:{targetWord},起始字符后的字符数:{charCount}"); // 示例输出:找到的单词:outside,起始字符后的字符数:6 } else { Console.WriteLine($"没有找到以'{targetStartChar}'开头的单词"); } } }
代码说明
- 用
Split时加上StringSplitOptions.RemoveEmptyEntries,能避免输入有多个连续空格时产生空字符串元素; Array.Find适合定位唯一符合条件的单词,如果可能有多个匹配项,可以改用Array.FindAll批量处理;StartsWith里的StringComparison.OrdinalIgnoreCase是为了不区分大小写,要是需要严格匹配,去掉这个参数就行;- 不需要额外遍历到空格——拆分后得到的已经是独立单词,直接用长度减1就能得到起始字符后的字符数,高效又简洁。
二、关于统计字符串中某个单词字符数的通用方法
C#里没有专门的“统计指定单词字符数”的内置方法,但因为单词本身就是string类型,只要你能定位到目标单词,直接用word.Length就能得到它的字符数。
如果需要更通用的场景,比如从任意字符串中定位单词并统计长度,可以试试这两种思路:
- 拆分字符串找单词(就是上面代码里的方式);
- 用
IndexOf定位单词起始位置再计算(适合不想拆分整个字符串的情况):
string input = "the weather outside is beautiful"; string targetWord = "outside"; int wordStartIndex = input.IndexOf(targetWord, StringComparison.OrdinalIgnoreCase); if (wordStartIndex != -1) { int wordLength = targetWord.Length; Console.WriteLine($"单词'{targetWord}'的字符数是:{wordLength}"); }
要是你想问的是统计单词中某个特定字符的出现次数,可以遍历字符计数:
int targetCharCount = 0; foreach (char c in targetWord) { if (c == 's') // 替换成你要统计的目标字符 { targetCharCount++; } }
内容的提问来源于stack exchange,提问作者Bogdan Muscari
相关产品推荐
相关产品推荐

