我希望能够在C#中使用visual studio计算姓名和姓名。目前我只能在文本中搜索1个单词。我正在使用.NET 5.0 (当前版本)创建控制台应用程序。
(当输入为" Harry“时,它计算找到Harry的次数,当输入为"Harry Potter”时,即使文本中有多次出现的"Harry Potter“,它也始终计为0。)
我一直在谷歌上寻找答案,但只能找到如何计算1个单词。
下面是我当前的代码:
using System;
using System.IO;
namespace Harry
{
class Program
{
static void Main(string[] args)
{
string input = Console.ReadLine();
StreamReader stream = File.OpenText("Harry Potter and the Sorcerer.txt");
string text = stream.ReadToEnd();
string woord = "";
int count = 0;
foreach (var item in text)
{
if (Char.IsLetter(item))
{
woord = woord + item;
}
else
{
if(woord == input)
{
count++;
}
woord = "";
}
}
Console.Write(input + ": " + count + " occurrences");
}
}
}发布于 2021-10-23 12:28:11
也许,与Auditive的建议一致:
int count = System.Text.RegularExpressions.Regex.Matches(text, input, RegexOptions.IgnoreCase).Count如果您仍然很短,请更改输入,使其具有值harry\s+potter,\s+表示“至少一个空格”,以防您的文本具有harrySPACESPACEpotter。(欢迎来到奇妙而神秘的正则表达式世界)
如果你仍然短小,我想你可能在文档中有拼写错误!?
--
如果你想算上哈利波特,你可以把你的正则表达式调整为harry|potter。
--
解决这一挑战的其他方法还有,一个典型的方法是检查通过拆分得到的数组的长度:
int count = text.Split(input).Length - 1;如果有5个哈利波特,你会得到一个6长的数组,因此是-1。不过,它可能会占用更多的资源;如果您追求的是尽可能低的CPU消耗,那么您可能会看到这样的情况:
int count=0;
for(int idx = text.IndexOf(input); idx > -1; count++, idx = text.IndexOf(input, idx+input.Length));这将设置一个用于计数的变量,然后重复使用IndexOf,直到返回-1。每次在第一次之后,IndexOf都从上次找到的字符串的末尾开始。没有循环体,一切都发生在头中。
值得指出的是,这两种方法都不区分大小写,但可以通过更多的工作来实现
发布于 2021-10-23 11:59:00
您可以使用正则表达式和File.ReadLines("File.txt"),您可以在这里看到:count a specifc word in a text file in C#
https://stackoverflow.com/questions/69687840
复制相似问题