首页 > 解决方案 > 为什么我的字符串没有被正确比较

问题描述

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

                }

            }

标签: c#string

解决方案


请参阅文档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,以及其他类似的事情。


推荐阅读