gpt4 book ai didi

c# - 检查字符串中重复消息的方法?

转载 作者:太空宇宙 更新时间:2023-11-03 20:31:07 24 4
gpt4 key购买 nike

消息是准确的,不需要担心它们之间的变化或符号,现在我只是在寻找一种可以检查如下消息的有效方法。

我有这样一条消息:

string msg = "This is a small message !";

我想检查该消息是否在同一个字符串中重复发送了多次,如下所示:

string msg = "This is a small message !This is a small message !";

或:

string msg = "This is a small message !This is a small message !This is a small message !";

或:

string msg = "This is a small message !This is a small message !This is a small message !This is a small message !This is a small message !";

我有一个 LinkedList<string>存储收到的最后 3 条消息以及最后 3 条消息我想匹配当前消息以查看它是否等于当前存储消息之一或任何重复消息。

foreach (string item in myListOfMessages)
{
if (string.Equals(msg, item))
{
// the message matchs one of the stored messages
}
else if (msg.Lenght == (item.Lenght * 2) && string.Equals(msg, string.Concat(item, "", item)))
{
// the message is a repetition, and ofc only works when some one sends the message twice in the same string
}
}

就像我在示例中展示的那样,重复可能非常大,而且我不确定我上面介绍的方法是否最适合我的需要。这是我想到的第一个想法,但很快我就意识到它会以这种方式产生更多的工作。

最佳答案

Linq 来拯救:

string msg = "This is a small message !";
string otherMsg = "This is a small message !This is a small message !This is a small message !This is a small message !This is a small message !";

bool isRepeated = Enumerable.Range(0, otherMsg.Length / msg.Length)
.Select(i => otherMsg.Substring(i * msg.Length, msg.Length))
.All( x => x == msg);

这种方法基本上采用第一条消息长度的子字符串,并将每个 block 与原始消息进行比较。

包装在一个带有一些预检查的方法中:

public bool IsRepeated(string msg, string otherMsg)
{
if (otherMsg.Length < msg.Length || otherMsg.Length % msg.Length != 0)
return false;

bool isRepeated = Enumerable.Range(0, otherMsg.Length / msg.Length)
.Select(i => otherMsg.Substring(i * msg.Length, msg.Length))
.All(x => x == msg);
return isRepeated;
}

编辑:

上述方法将生成不必要的字符串,这些字符串必须被 gc 处理 - 一种更高效、更快速的解决方案:

public bool IsRepeated(string msg, string otherMsg)
{
if (otherMsg.Length < msg.Length || otherMsg.Length % msg.Length != 0)
return false;

for (int i = 0; i < otherMsg.Length; i++)
{
if (otherMsg[i] != msg[i % msg.Length])
return false;
}
return true;
}

关于c# - 检查字符串中重复消息的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7508832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com