我正在尝试为Twitch创建我的第一个聊天机器人,并且我遇到了一些问题,我使用的表情。
我需要能够从一个字符串中删除几个表情(在抽搐上的表情仅仅是单词)。
我不知道单词是什么,但我知道单词在字符串中的位置,起始索引和长度。
例如,消息:Hello HeyGuys how are you? WutFace WutFace在the上生成以下内容:

使用tmi.js,我可以获取这条消息,包括消息中的表情,并将它们发送到我的C#程序。
我在C#中从tmi.js收到的消息如下所示:
{ '28087':'27-33','35-41‘,'30259':'6-12’}
其中,"28087“和"30259”是表情的ID,27-33,35-41和6-12是表情在消息本身中的位置。
如何使用每个单词/表情的预定义开始和停止位置从字符串中删除所有这些单词/表情?
我的一次失败的尝试:
dynamic json = JsonConvert.DeserializeObject(emotes); // { '28087': [ '27-33', '35-41' ], '30259': [ '6-12' ] }
int prevLength = 0;
foreach (var a in json)
{
foreach (var b in a)
{
for (int i = 0; i < b.Count; i++)
{
string range = b[i];
int start = Convert.ToInt32(range.Split('-')[0]);
int end = Convert.ToInt32(range.Split('-')[1]);
int length = end - start;
length = length + 1;
if (prevLength != 0)
{
start = start - prevLength;
}
prevLength = prevLength + length;
message = message.Remove(start, length);
}
}
}上面的代码可以从字符串中删除多个表情/单词,只要表情/单词是相同的。混合表情/词不起作用。
发布于 2021-10-24 20:25:54
首先,我鼓励你摆脱那个dynamic。这不仅是因为你完全失去了类型安全,还因为它使你更难理解你在做什么。你可以有一个更好的结构,只要:
var ranges = JsonConvert
.DeserializeObject<Dictionary<string, string[]>>(emotes)
// Get the strings in each list, the Key doesn't matter here
.SelectMany(x => x.Value)
// And transform the strings into objects like { int Start; int End; }
.Select(x =>
{
var splitted = x.Split('-');
return new
{
Start = int.Parse(splitted[0]),
End = int.Parse(splitted[1])
};
});现在,您不需要3个循环,您不需要担心拆分、解析或其他任何事情。您只需要从字符串中删除这些索引:
foreach (var range in ranges)
{
// TODO: remove range from message using range.Start and range.End
}已经简单多了!现在,对于实际删除这些表情,您需要仔细考虑删除其他表情的索引。
您可以在每次删除后,获取每个随机表情,并处理message中的开始和结束索引,但这很容易出错,而且总体上太复杂了。
有一种简单得多的方法可以做到这一点,从最后一个表情开始,一直工作到第一个,只有这样才能做到这一点:
var ranges = JsonConvert
// ... existing code
.OrderByDescending(x => x.End);所以现在你可以根据它们的末端位置来排序所有的范围,这样你就可以很容易地摆脱它们了:
foreach (var range in ranges)
{
message = message.Remove(range.Start, range.End - range.Start + 1);
}看看这个动作:https://dotnetfiddle.net/QkktG3
Hello HeyGuys how are you? WutFace WutFace
Hello HeyGuys how are you? WutFace
Hello HeyGuys how are you?
Hello how are you?https://stackoverflow.com/questions/69700152
复制相似问题