如何过滤和删除不包含特定单词的行?

时间:2014-04-06 14:50:47

标签: c# winforms

这是现在的方法:

private void WordsFilter(List<string> newText)
{
    for (int i = 0; i < newText.Count; i++)
    {
        for (int x = 0; x < WordsList.words.Length; x++)
        {
            lineToPost = ScrollLabel._lines[i];
            if (!lineToPost.Contains(WordsList.words[x]))
            {
                newText.Remove(lineToPost);
            }
        }
    }
}

newText是List,WorldsList.words是string []

我循环遍历newText中的行并循环显示单词,我想以这种方式检查:

newText中的第一行循环遍历所有单词,如果此行中没有任何单词,则删除当前行和后一行。 例如,在newText中,如果索引0中的行是:Hello everyone 索引1中的行是:创建于2002年12月3日 然后删除索引0和索引1

索引2是空的,就像空格一样,所以不要删除它。

然后索引3循环遍历所有单词,如果单词的nonoe在索引3中排成一行,则删除索引3和索引4.

等等......

我该怎么做?

1 个答案:

答案 0 :(得分:0)

Here a working example。我试图改变代码的逻辑:

using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        List<string> list = new List<string>() {"truc", "I love toto", "next", "chocolate", "tata tata", "", "something"};
        WordsFilter(list);
    }

    private static void WordsFilter(List<string> newText)
    {
        string[] WordsList = new string[] { "toto", "tata" };

        for (int i = 0; i < newText.Count; i++)
        {
            for (int x = 0; x < WordsList.Length; x++)
            {
                if (newText[i].Contains(WordsList[x]))
                {
                    newText.RemoveAt(i);
                    if (i + 1 < newText.Count)
                        newText.RemoveAt(i);
                }
            }
        }

        // print
        foreach(var item in newText)
        {
            Console.WriteLine(item);
        }
    }
}

您应该检查foreach loopLINQ的工作原理。