2

我知道如何转到特定行,但我不知道如何更新字符串中的特定行。我尝试了替换功能,但它也覆盖了重复项。有任何想法吗?

  static string GetLine(string text, int lineNo)
  {
     string[] lines = text.Replace("\r", "").Split('\n');
     return lines.Length >= lineNo ? lines[lineNo - 1] : null;
  }

 static void Main(string[] args)
 {
   string file = "D:\\random.text";
   string contents = "";
   string text="random";
   contents = File.ReadAllText(file);
   finale=GetLine(contents,lines);
   // Console.ReadLine();
    if(finale.Contains(text))
    {
        finale.Replace(text,"Random");
        System.Console.WriteLine(finale);
        Console.ReadLine();
    }
 }
4

3 回答 3

1

字符串是不可变类型,这意味着您不能更改现有字符串。string.Replace返回替换的字符串,您需要将其重新分配。

if(finale.Contains(text))
{
    finale = finale.Replace(text,"Random"); //<- note here
    System.Console.WriteLine(finale);
    Console.ReadLine();
}

如 Philippe 所述,您需要从那里重建字符串数组中的字符串。一个完整的例子(但未经测试):

  static string[] GetLines(string text)
  {
     return text.Replace("\r", "").Split('\n');
  }

  static string GetLine(string[] lines, int lineNo)
  {
      return lines.Length >= lineNo ? lines[lineNo - 1] : null;
  }

 static void Main(string[] args)
 {
   string file = "D:\\random.text";
   string contents = "";
   string text="random";
   contents = File.ReadAllText(file);
   var lines = GetLines(contents);
   finale = GetLine(lines, lineNo);
   //Console.ReadLine();
   if (finale == null)
       return;
    if(finale.Contains(text))
    {
        finale = finale.Replace(text, "Random");
        System.Console.WriteLine(finale);
        Console.ReadLine();
    }
    lines[lineNo] = finale;
    contents = string.Join('\n', lines);
 }

最重要的是,您根本不需要所有拆分功能。.NET 具有该功能,并且它可以延迟(按需)执行,这是一个额外的好处。

如果您使用的是 .NET 4.0 及更高版本,请参阅File.ReadLines 。

于 2013-06-16T07:46:49.853 回答
0

最快的解决方案是保留 Split 返回的数组,然后使用String.Join重建您开始的内容。

于 2013-06-16T07:45:09.260 回答
0

只需在读取文件时使用字符串生成器重建字符串。

static void Main(string[] args)
{
    string file = "D:\\random.txt";
    string find = "random";
    string replace = "Random";

    StringBuilder resultList = new StringBuilder();
    using (var stream = File.OpenText(file))
    {
        while (stream.Peek() >= 0)
        {
            string line = stream.ReadLine();
            if(line == find)
            {
                line = replace;
            }

            resultList.AppendLine(line);
        }
    }
    string result = resultList.ToString();

    Console.WriteLine(result);

    Console.Read();
}
于 2013-06-16T08:10:32.647 回答