C# 如何高效地删除字符串之前(而不是之后)的所有选项卡?

C# 如何高效地删除字符串之前(而不是之后)的所有选项卡?,c#,string,parsing,replace,C#,String,Parsing,Replace,我有一个大的文本文件,我正试图解析。为了解析这个文件,我需要删除字符串前面的所有标签,而不是后面的标签 比如说 string sample = "\t\t\tThis is a string \t with a tab"; sample = RemoveInitialTabs(sample); // sample should now be "This is a string \t with a tab"; 目前,我通过将文件读入一个数组(由换行符分隔),在每一行中迭代一个字符,然后对每一行调

我有一个大的文本文件,我正试图解析。为了解析这个文件,我需要删除字符串前面的所有标签,而不是后面的标签

比如说

string sample = "\t\t\tThis is a string \t with a tab";
sample = RemoveInitialTabs(sample);
// sample should now be "This is a string \t with a tab";
目前,我通过将文件读入一个数组(由换行符分隔),在每一行中迭代一个字符,然后对每一行调整字符串,直到达到一个非制表符,就像这样

for (int i = file_content.Count - 1; i > -1; i--)
{
   // Remove initial tabs...
   int size = 0;
   for (int j = 0; j < file_content[i].Length; j++)
   {
      if (file_content[i][j] != '\t')
      {
         break;
      }
      else
      {
         size = j + 1;
      }
   }

   if (size > 0)
   {
      file_content[i] = file_content[i].Remove(0, size);
   }
}
for(int i=file\u content.Count-1;i>-1;i--)
{
//删除初始选项卡。。。
int size=0;
对于(int j=0;j<文件内容[i]。长度;j++)
{
如果(文件内容[i][j]!='\t')
{
打破
}
其他的
{
尺寸=j+1;
}
}
如果(大小>0)
{
文件内容[i]=文件内容[i]。删除(0,大小);
}
}
这是可行的,但速度非常慢(由于文件中内容的大小,一次运行通常只需66453ms即可删除选项卡)


有什么想法吗?

我想可以帮助你的是
TrimStart(params char[]trimChars)

例如,您可以使用:

sample = sample.TrimStart(new char[] {'\t'});
此命令的输出符合要求。

请使用regex尝试:

string pattern = "^\s*";
for (int i = file_content.Count - 1; i > -1; i--)
{   
    file_content[i] = Regex.Replace(file_content[i], pattern, String.Empty));
}

我认为您可以保存的一个地方(只是一点点):为什么要先读取所有字符串,然后处理它们并处理两个巨大数组的所有复制

我的意思是:在阅读文本文件时,为什么不删除前导标签呢

另一方面,;您当前的解决方案坚持“责任分离”原则。它为整体运行时的一个潜在改进打开了大门:在阅读初始内容后,您可以对该数组进行切片,并使用多个线程以并行方式修剪该数组的不同部分


你看,最后你谈论的是一个代价高昂的操作:更改字符串的开头将意味着复制一个或多个字符串(至少在大多数语言中是这样)。无论您是使用自己的代码,还是使用正则表达式,还是使用TrimStart()。。。你将无法低于某个“价格标签”。但是假设我们谈论的是真正巨大的阵列(可能是100到数千条线);然后并行处理这些行可以显著减少整个运行时间。

谢谢!非常感谢!