消息解析器c#

本文关键字:消息 | 更新日期: 2023-09-27 18:04:11

我一直在尝试制作某种消息解析器,它只获取我发送的消息。例如,如果我有这样的消息:

Viktor Bale (11 aug. 2016 13:20:56):
Hi! How are you?
Not Viktor Bale (11 aug. 2016 13:20:56):
Hi! Good! And you?
Viktor Bale (11 aug. 2016 13:20:56):
Me too! And this message has 
Two lines!
Not Viktor Bale (11 aug. 2016 13:20:56):
And this doesn't matter!

我只需要得到Viktor Bale写的消息下面是我尝试过的代码:

for (int i = 0; i < wordsList.Count; i++) 
{ 
    if (wordsList[i].StartsWith(defaultName)) 
    { 
        while (!wordsList[i].StartsWith(dialName)) 
        { 
            messages.Add(wordsList[i]); 
        } 
    }    
} 

wordsList是我的消息列表,ReadAllLines从txt文件中接收并读取所以上面的消息就是list。

defaultName是我的名字,dialName是我的对话者的名字。

但是当我启动它时,我的应用程序只是冻结。我该怎么做呢?

消息解析器c#

您忘记增加i:

for (int i = 0; i < wordsList.Count; i++) 
{ 
    if (wordsList[i].StartsWith(defaultName)) 
    {
        while (i < worldList.Count && !wordsList[i].StartsWith(dialName)) 
        { 
            messages.Add(wordsList[i++]); 
        } 
    }    
} 

编辑:添加安全边界检查

while循环永远不会结束。

也许你是这个意思?我整理了你的代码,使它更简单。

foreach (var words in wordsList) 
{ 
  if (words.StartsWith(defaultName) && !words.StartsWith(dialName)) 
  { 
    messages.Add(wordsList[i]); 
  }   
} 

您应该能够使用linq选择您的消息,假设每行以发送者的名称开始,并且消息不包括换行符。例如

var myMessages = wordsList.Where(x => x.StartsWith(defaultName))

应用程序在while循环中崩溃,while循环只是计算条件无穷大,但从不做任何事情来改变它。

要避免无休止的while循环,请使用以下代码:

for (int i = 0; i < wordsList.Count; i++) 
{ 
  if (wordsList[i].StartsWith(defaultName)) 
    { 
      if (!wordsList[i].StartsWith(dialName)) 
      { 
        messages.Add(wordsList[i]); 
      } 
    }    
}

你可以用一些更简单的东西来实现你想要的行为:

foreach (var word in wordsList) 
{ 
    if (word.StartsWith(defaultName)) 
    { 
        messages.Add(word); 
    }    
}

希望有所帮助

可以这样做:

public static string ExtractSenderName(string line) {
    var i = line.IndexOf('(');
    if (i == -1)
        return string.Empty;
    return line.Substring(0, i).Trim();
}
public static void Main (string[] args) {
    var messages = new List<string>();
    for (int i = 0; i < wordsList.Length; i++) 
    {
        if (ExtractSenderName(wordsList[i]) == defaultName) {
            messages.Add(wordsList[++i]);
        }
    }
    foreach (var x in messages) {
        Console.WriteLine(x);
    }
}

这是演示