我不明白为什么在比较这些字符串时会遇到问题。我正在读取文本文件,对于每个文本文件,每一行都被读入数组。 使用foreach循环,我遍历数组的每一行以比较该行的前两个值。然后,根据值,我需要用不同的值替换字符串的一部分。我已经知道第一行中子字符串的前两个值返回“ 01”,但是在调试时,它总是会显示我的else语句,说它不起作用。谁能启发我?
foreach (var i in files)
{
string[] lines;
lines = System.IO.File.ReadAllLines(i);
foreach(string j in lines)
{
string str1 = "01";
string sub = j.Substring(0, 2);
if(sub.ToString().Equals(str1))
{
j.Remove(45, 2);
j.Insert(45, "0");
}
else
{
Console.WriteLine("Didn't work");
Console.Read();
}
}
答案 0 :(得分:2)
请参阅string.Remove()
和string.Insert()
方法的文档。他们不会更改现有的string
,只需创建一个新的string
并返回新创建的string
。
因此,考虑到这一点,您可以进行如下小的修改。我还对该方法进行了一些编辑,因此更加通用。
static void Main(string[] args)
{
ReplaceFileContent(@"Input.txt", "01", 45, 2, "0");
Console.ReadLine();
}
public static void ReplaceFileContent(string file, string find, int replaceAt, int replaceLen, string replaceWith)
{
var lines = File.ReadAllLines(file).ToList();
if (lines != null && lines.Count > 0)
{
for (int i = 0; i < lines.Count; i++)
{
if (lines[i].Substring(0, find.Length) == find)
{
lines[i] = lines[i].Remove(replaceAt, replaceLen);
lines[i] = lines[i].Insert(replaceAt, replaceWith);
}
}
}
File.WriteAllLines(file, lines);
}
显然,您必须进行一些错误处理,例如检查每行是否至少长于replaceAt
+ replaceLen
,以及类似的事情。
答案 1 :(得分:0)
看来我能够使它工作。感谢您的意见,他们确实提供了帮助。即使我读过/听说过字符串是不可变的,但这仍然是一个我忘记的概念(我不是专职程序员)。
class Program
{
static void Main(string[] args)
{
string[] files = System.IO.Directory.GetFiles(@"Some Directory");
int counter = 0;
foreach (var i in files)
{
string[] lines;
lines = System.IO.File.ReadAllLines(i);
for(int j=0;j<lines.Length;j++)
{
StringBuilder str = new StringBuilder();
string str1 ="";
string str2 = "";
string fullLine = lines[j];
string sub = lines[j].Substring(0, 2);
if(sub.Equals("01"))
{
str1 = fullLine.Remove(44, 2);
str2 = str1.Insert(45, "0");
str.Append(str2);
}
else if(sub.Equals("02"))
{
str1=fullLine.Remove(2, 2);
str2 = str1.Insert(2, "0");
str.Append(str2);
}
else if(sub.Equals("99"))
{
str.Append(lines[j]);
}
lines[j] = str.ToString();
}
System.IO.File.WriteAllLines(someDirectory, lines);
counter++;
}
}
}