c# - 为什么我的字符串没有被正确比较
问题描述
我不明白为什么在比较这些字符串时会出现问题。我正在阅读文本文件,对于每个文本文件,每一行都被读入一个数组。使用 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();
}
}
解决方案
请参阅文档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
,以及其他类似的事情。
推荐阅读
- sparql - 由于 where 子句,Sparql 中的缺失值
- python - 如何在熊猫数据框中格式化大数字(int)?
- apache-kafka - 如何在 Java 中使用 Kafka Admin Client 获取 Kafka 任何已提交偏移的提交时间?
- mysql - 如何仅获取具有多个值的事件?
- c# - ASP.NET MVC EF-Migrations - 如何从包含表和所有已保存记录的数据库中创建 SCRIPT
- python - Python中彩色图像的渐变
- angular - 未捕获的错误:模块的加载超时:路由,uipagestartup(Angular 应用程序)
- msbuild - 在 MSBuild 中添加到 AssemblySearchPaths 的路径
- jquery - lazyload.js - 重复图像问题
- c# - Jenkins 失败的单元 CanExecute 测试的方法不确定