【发布时间】:2019-03-06 07:07:27
【问题描述】:
您可能都知道在各种文本编辑器中删除制表符或多行空格的键盘快捷键(Shift + Tab)。 我想用 C# 中的字符串来执行此操作。
我知道如何以一种非常未优化且不是非常错误的保存方式来做到这一点。但是有一些“简单”的方法可以做到这一点,例如使用正则表达式,还是剪掉一些优化的代码以便在那里使用?
但重点是从一开始就删除一个制表位。
一些代码的想法:
string textToEdit = "Some normal text\r\n" +
"\tText in tab\r\n" +
" Text in space tab\r\n" +
" \t Text in strange tab\r\n" +
"\t\t\tMultiple tabs\r\n" +
" Not quite a tab";
int spacesInTabstop = 4;
string[] lines = textToEdit.Split('\n');
foreach (string line in lines)
{
int charPos = 0;
for (int i = 0; line.Length > 0 && i < spacesInTabstop + charPos; i++)
{
if (line[charPos] == '\t')
{
line = line.Remove(0, 1);
break; //Removed tab successfully
}
else if (line[charPos] == ' ')
{
line = line.Remove(0, 1); //Remove one of four spaces
}
else if (char.IsWhiteSpace(line[charPos]))
{
charPos++; //Character to ignore
}
else
break; //Nothing to remove anymore
}
}
textToEdit = string.Join("\n", lines);
输出应该是:
Some normal text
Text in tab
Text in space tab
Text in strange tab
Multiple tabs
Not quite a tab
【问题讨论】:
-
line.Trim()删除所有前导和尾随空格,包括制表符。 -
你能显示你想要的确切输出吗,这是否仅限于 4 个?
-
注意
Remove方法返回的是新的字符串,不会影响原字符串。 -
@OlivierJacot-Descombes 关键是从一开始只删除一个制表位(就像使用 Shift + Tab 一样)
-
Text in strange tab后面有一个空格的原因是什么?您还假设制表符是 4 个空格吗?最后,你想用空格替换所有标签,还是不在乎
标签: c# text text-editor tabstop