0

我有一个文本框,如果前行 = 后行,我想删除行。

我有这样的文字:

Ab cd ...

Ef Gss ...
EE oo ...
EE oo ... // delete this line
qq ss ff

ok ee ..

我尝试了许多代码,但它删除了我所有相同的行。我只想删除下同一行。空行应始终存在。

我使用的代码:

richTextBox1.Text = string.Join( Environment.NewLine, richTextBox1.Lines.Distinct()); 

或者:

for (int tx = 0; tx < richTextBox1.Text.Length; tx++)
        {
            for (int tx1 = tx + 1; tx1 < richTextBox1.Text.Length; tx1++)
            {
                if (richTextBox1.Lines[tx] == richTextBox1.Lines[tx1])
                   // something like  richTextBox1.Lines[tx1].RemoveAt(tx1);
            }
        }
4

4 回答 4

2

试试这个 -

      string[] temp = richTextBox1.Lines;
      for (int i= 0; i< richTextBox1.Lines.Length - 1; i++)
      {
          if (richTextBox1.Lines[i] == richTextBox1.Lines[i+ 1]
               && rt.Lines[i] != String.Empty)
          {
              temp[i] = null;
          }
      }
      richTextBox1.Lines = temp.Where(a => a != null).ToArray();
于 2012-11-15T12:13:16.447 回答
0

试试这个:

textBox1.Text = string.Join(Environment.NewLine, textBox1.Lines.Distinct());
于 2012-11-15T12:11:48.377 回答
0

您发布的代码看起来很适合删除下一行,但您正在删除其余文本中等于第一个循环中的行的所有行。所以在你的代码中

xyz//line0
abc//line1
abc//line2
//line3
hjk//line4
abc//line5

行:2,5 将被删除,如果我理解正确,您只想删除第 2 行。

我的例子

line1 text //line index 0
abc //line index 1
abc//delete this line, index 2
abc//delete this line, index 3

第1步。行索引 2 已删除

line1 text //line index 0
abc //line index 1
//deleted abc line, previous index 2, 
abc//delete this line, index 2, previous index 3

但是删除行索引 2 后的 tx 将增加,因此您将位于基本文本第 3 行,因此我们需要添加 tx--

for (int tx = 0; tx < richTextBox1.Text.Length - 1; tx++)
    {
            if (richTextBox1.Lines[tx] == richTextBox1.Lines[tx+1])
            {
               // something like  richTextBox1.Lines[tx+1].RemoveAt(tx);
               tx--;
            }
        }
    }

如果你不想删除空行,你应该在上面修改 if 语句

if(!String.IsNullOrEmpty(richTextBox1.Lines[tx]) &&richTextBox1.Lines[tx] == richTextBox1.Lines[tx+1])
于 2012-11-15T12:17:38.137 回答
0

我认为 yield 运算符解决了这个问题:

public static IEnumerable<String> GetDistinctLines(IEnumerable<String> lines)
{
    string currentLine = null;
    foreach (var line in lines)
    {
        if (line != currentLine)
        {
            currentLine = line;
            yield return currentLine;
        }
    }
}

然后

richTextBox1.Lines = GetDistinctLines(richTextBox1.Lines).ToArray();
于 2012-11-15T12:55:14.507 回答