如何删除 RichTextBox 中每一行的第一个字符

How to remove first char of every line in RichTextBox

我有一个带有 RichTextBox 的 C# 项目,每行都以某个数字开头,但我需要删除该数字,因此我需要删除该 RichTextBox 每一行的第一个字符。

它也可能在某处有一个空行。

示例:

1H|\^&|||XS^00-20^69652^^^^05342311||||||||E1394-97
32
2P|1|||4422/12/17|^Turinawe^ROBERT||19831013|M|||||||||||||||||^^^MHC
54
3C|1
33

我需要:

H|\^&|||XS^00-20^69652^^^^05342311||||||||E1394-97
2
P|1|||4422/12/17|^Turinawe^ROBERT||19831013|M|||||||||||||||||^^^MHC
4
C|1
3

我试过此代码和类似代码但没有成功

var  linije = txtStatus.Lines;
for (int i = linije.Count() - 1; i >= 0; i--)
{
  var thisLineStart = txtStatus.GetFirstCharIndexFromLine(i);
  var maxLines = txtStatus.Lines.Count();
  if (i >= maxLines)
  {
    txtStatus.Text = txtStatus.Text.Remove(thisLineStart);
  }
  else
  {
    var nextLineStart = txtStatus.GetFirstCharIndexFromLine(i + 1);
    txtStatus.Text = txtStatus.Text.Remove(thisLineStart, nextLineStart - thisLineStart);
  }
}

我在这里使用的是通用 List<string>,因为我使用的是控制台应用程序,但这里的想法是相同的。您遍历行,并将每一行替换为从 index=1.

开始的 Substring
var lines = new List<string>
{
    @"1H|\^&|||XS^00-20^69652^^^^05342311||||||||E1394-97 2",
    @"2P|1|||4422/12/17|^Turinawe^ROBERT||19831013|M|||||||||||||||||^^^MHC 4",
    @"3C|1 3"
};

for (int i = 0; i < lines.Count; i++)
{
    lines[i] = lines[i].Substring(1);
}

如果您可以访问 Linq,则可以使用 Select。 Sach 答案的 Linq 对应项是:

lines = lines.Select(line => line.Substring(1));

Lines 集合已经为您提供了您想要的位置,因此只需使用它:

StringBuilder sb = new StringBuilder();
foreach (string s in txtStatus.Lines) {
  if (s.Length > 0) {
    sb.AppendLine(s.Substring(1));
  }
}
txtStatus.Text = sb.ToString();

如果您的数字进入两位或更多数字范围,那么您将不得不开始检查各个字符,直到您得到一个非整数。

尝试其他解决方法:

var lines = txtStatus.Lines;
test.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries)
    .ToList().ForEach((line)=> 
    {
        line = line.Substring(1);
    });