替换字符串中的文本并保存到.NET中的文件

时间:2018-04-10 09:03:31

标签: c# .net text replace

如果程序找到要替换的文本,我想删除文本,所以我准备了这段代码:

  string[] lines = File.ReadAllLines(@"pathtofile");
        int Object = 0;
        foreach (string line in lines)
        {

            if (line.Contains("Object"))
            {
                MessageBox.Show("contain!");
                dsObject++;
            }

            if (Object == 1)
            {
                line.Replace("Object", " ");
                MessageBox.Show(line);
            }


            File.AppendAllText(@"savefile.txt", line + Environment.NewLine);
            string result = line;
           // MessageBox.Show(line);


        }

这不起作用。

2 个答案:

答案 0 :(得分:4)

c#

中的字符串为immutable

因此必须更换

  line.Replace("Object", " ");

line = line.Replace("Object", String.Empty);

修改

,因为laven-hvar表示您无法更改foreach项 因此你要改为“普通”for循环

for (int i = 0; i < lines.Length; i++)
{
     lines[i] = lines[i].Replace("Object", String.Empty);
}

答案 1 :(得分:1)

使用for循环而不是foreach循环,因为line = line.Replace("Object", String.Empty)将无法编译,因为line是foreach迭代变量。而不是line = line.Replace("Object", String.Empty)在for循环中使用lines[i]=lines[i].Replace("Object", String.Empty);

string[] lines = File.ReadAllLines(@"pathtofile");
int Object = 0;
for (int i = 0; i < lines.Length; i++)
{
    if (lines[i].Contains("Object"))
    {
        MessageBox.Show("contain!");
        dsObject++;
    }

    if (Object == 1)
    {
        lines[i]=lines[i].Replace("Object", String.Empty);
        MessageBox.Show(lines[i]);
    }

    File.AppendAllText(@"savefile.txt", lines[i] + Environment.NewLine);
    string result = lines[i];
}

如果您希望缩短代码,可以使用此LINQ解决方案:

var result = lines.Select(x => x.Replace("Object", String.Empty)).ToList();
result.ForEach(line=>File.AppendAllText(@"savefile.txt", line + Environment.NewLine));