我知道如何转到特定行,但我不知道如何更新字符串中的特定行。我尝试过替换功能,但它也会覆盖重复项。有什么想法吗?
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();
}
}
答案 0 :(得分: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。
答案 1 :(得分:0)
最快的解决方案是保持Split返回的数组,然后使用String.Join重建你开始的内容。
答案 2 :(得分: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();
}