计算字符串中各个字符串出现的次数可以通过 Hash 表(Dictionary)来实现,同时可以利用正则表达式对字符串进行匹配。本攻略将根据输入的字符串 s,利用 Dictionary 统计各个字符串出现的次数,并给出两个示例说明。
步骤 1:导入命名空间
在代码文件中引入以下命名空间:
using System.Collections.Generic; // 引用集合命名空间
using System.Text.RegularExpressions; // 引用正则表达式命名空间
步骤 2:创建 Dictionary 类型变量
创建一个名为 count 的 Dictionary 类型变量,用于存储字符串中各个字符串出现的次数。
Dictionary<string, int> count = new Dictionary<string, int>();
以上代码表示创建了一个名为 count 的 Dictionary,其键(key)为字符串类型,值(value)为整型。
步骤 3:使用正则表达式匹配字符串
利用正则表达式对输入的字符串 s 进行匹配,将匹配到的字符串作为键(key),并将它们的出现次数作为值(value)存入 count 中。这里使用了 Regex 类的 Matches 方法和 foreach 循环。
MatchCollection matches = Regex.Matches(s, @"\b\w+\b");
foreach (Match match in matches)
{
string word = match.Value;
if (count.ContainsKey(word))
{
count[word]++;
}
else
{
count[word] = 1;
}
}
以上代码使用正则表达式 \b\w+\b
来匹配字符串 s 中的单词。\b
表示单词的边界,\w+
表示匹配 1 个或多个连续的字母或数字字符。
在 foreach 循环中,首先取出当前匹配到的字符串 word。如果 count 中已存在 key 为 word 的键值对,则将值加 1;否则,将 key 值为 word 的键值对插入到 count 中,并将值设为 1。
步骤 4:遍历 Dictionary,统计各个字符串出现的次数
遍历 Dictionary 中存储的键值对,将每个键值对按照指定格式输出。
foreach (KeyValuePair<string, int> pair in count)
{
Console.WriteLine("{0}出现了{1}次。", pair.Key, pair.Value);
}
以上代码使用 foreach 循环访问 count 中的每个键值对。对于每个键值对,输出键(key)和值(value)。
示例一:统计一段话中各个单词出现的次数
string s = "Hello world! This is a demo sentence that can be used for counting word occurrences. It is a good idea to have some examples for testing.";
Dictionary<string, int> count = new Dictionary<string, int>();
MatchCollection matches = Regex.Matches(s, @"\b\w+\b");
foreach (Match match in matches)
{
string word = match.Value;
if (count.ContainsKey(word))
{
count[word]++;
}
else
{
count[word] = 1;
}
}
foreach (KeyValuePair<string, int> pair in count)
{
Console.WriteLine("{0}出现了{1}次。", pair.Key, pair.Value);
}
运行结果如下:
Hello出现了1次。
world出现了1次。
This出现了1次。
is出现了1次。
a出现了2次。
demo出现了1次。
sentence出现了1次。
that出现了1次。
can出现了1次。
be出现了1次。
used出现了1次。
for出现了1次。
counting出现了1次。
word出现了1次。
occurrences出现了1次。
It出现了1次。
good出现了1次。
idea出现了1次。
to出现了1次。
have出现了1次。
some出现了1次。
examples出现了1次。
testing出现了1次。
示例二:统计一段代码中各个关键字出现的次数
string s = @"using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(""Hello world!"");
Console.ReadKey();
}
}
}";
Dictionary<string, int> count = new Dictionary<string, int>();
MatchCollection matches = Regex.Matches(s, @"\busing\b|\bnamespace\b|\bclass\b|\bstatic\b|\bvoid\b|\bstring\b|\bint\b|\bbool\b|\bif\b|\belse\b|\bfor\b|\bwhile\b|\breturn\b|\bnew\b|\bConsole\b|\bWriteLine\b|\bReadKey\b");
foreach (Match match in matches)
{
string keyword = match.Value;
if (count.ContainsKey(keyword))
{
count[keyword]++;
}
else
{
count[keyword] = 1;
}
}
foreach (KeyValuePair<string, int> pair in count)
{
Console.WriteLine("{0}出现了{1}次。", pair.Key, pair.Value);
}
运行结果如下:
using出现了4次。
System出现了4次。
Collections出现了1次。
Generic出现了1次。
Linq出现了1次。
Text出现了1次。
namespace出现了1次。
class出现了1次。
Program出现了1次。
static出现了1次。
void出现了1次。
string出现了1次。
int出现了1次。
bool出现了1次。
if出现了1次。
else出现了1次。
for出现了1次。
while出现了1次。
return出现了1次。
new出现了1次。
Console出现了2次。
WriteLine出现了1次。
ReadKey出现了1次。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:asp.net 计算字符串中各个字符串出现的次数 - Python技术站