为什么我的字符串比较不正确

时间:2018-08-08 16:14:18

标签: c# string

我不明白为什么在比较这些字符串时会遇到问题。我正在读取文本文件,对于每个文本文件,每一行都被读入数组。 使用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();

                }

            }

2 个答案:

答案 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++;


        }




    }
}