【问题标题】:Replace text in string and save to file in .NET替换字符串中的文本并保存到 .NET 中的文件
【发布时间】:2018-09-19 19:58:48
【问题描述】:

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

  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);


        }

这不起作用。

【问题讨论】:

  • 为什么你有两个不同的计数器?你永远不会增加Object
  • 什么你想删除,什么不起作用?
  • 我想在我的文件中删除单词“Object”,但是我有一些这样的表达式,所以我想从给定的行中删除它,并重复这个单词。
  • @MarekPucek 你接受的答案真的有效吗,因为我在line = line.Replace("Object",String.Empty); 中遇到了一个compalation 错误,因为line 是一个foreach 迭代变量
  • 如果您想更改集合/数组的内容,请使用 for 而不是 foreach

标签: c# .net text replace


【解决方案1】:

字符串在c#中是immutable

因此必须更换

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

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

编辑

因为 slaven-hvar 说你不能改变 foreach 项目 因此,您要更改为“正常”for 循环

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

【讨论】:

  • line = line.Replace("Object",String.Empty); 不会编译,因为 line 是一个 foreach 迭代变量
  • 这个答案是部分的,由于foreach而无法更改行
【解决方案2】:

使用 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));

【讨论】:

  • linq 提案会扫描数据两次,因为大数据不是一个好建议,但可以修改为使用 linq 并只执行一次(在 .Foreach 内进行替换)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-18
  • 2016-10-20
  • 1970-01-01
相关资源
最近更新 更多