如何删除 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);
});
我有一个带有 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);
});