我有一个TextBox,如果在行之前的行之后删除行。
我有这样的文字:
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);
}
}
答案 0 :(得分: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();
答案 1 :(得分:0)
试试这个:
textBox1.Text = string.Join(Environment.NewLine, textBox1.Lines.Distinct());
答案 2 :(得分: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(!String.IsNullOrEmpty(richTextBox1.Lines[tx]) &&richTextBox1.Lines[tx] == richTextBox1.Lines[tx+1])
答案 3 :(得分: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();