如何用程序将字符串上的整数比较替换为布尔比较
本文关键字:比较 整数 替换 布尔 何用 程序 字符串 | 更新日期: 2023-09-27 18:27:41
我正在将C++应用程序转换为C#,在许多地方它使用AnsiCompare
来比较两个字符串。这返回一个整数,所以在所有代码中都有这样的东西:
if (str.AnsiCompare("value") == 0 || str2.AnsiCompare("val") != 0)
我刚刚在AnsiCompare
上做了一个Find and Replace,将其切换为Equals
,但由于在C#中无法将bool
隐式转换为int
,我必须手动执行并删除所有与0的比较。
相反,我正在尝试编写一个应用程序,它将逐行进行解析,如下所示:
List<int> lineIndices = new List<int>();
int lineIndex = 0;
foreach(var line in lines)
{
int index = line.IndexOf("Equals('"");
if (index > 0)
lineIndices.Add(lineIndex)
}
for (int i = lineIndices.Count; i >= 0; i--)
{
lines[lineIndices[i]].Replace(" == 0", String.Empty);
}
我还没有真正测试过它,但基本的想法是在每一行上循环,看看它是否调用"Equals",并将该行号添加到行号列表中。然后循环(不确定我是否真的需要反过来做,但我想这无关紧要),并用空的string
替换所有"等于零"的比较。由于它Equals
返回一个bool
,所以这相当简单。然而,当与!= 0
进行比较时,我不知道如何找到代码段的开头作为感叹号的前缀。
我知道有String.IndexOf(string, int32, int32)
可以搜索从给定位置开始到一定数量的位置的值,但我需要与之相对的。从一个位置开始,向后检查空格,然后用空格+感叹号替换该空格?
我想我可以从头开始,使用LastIndexOf
来查找"Equals"
索引之前的最后一个空间,但这不考虑没有空间的情况,例如if (someStr.Equals("val") != 0)
。然后我会得到(
之前的空间。
我怎样才能做到这一点?
带有"使用正则表达式"的Visual Studio"查找和替换"工具非常适合执行此类任务。
例如,要用stringVariable == stringLiteral
替换每个stringVariable.AnsiCompare(stringLiteral) == 0
,可以使用以下正则表达式:
(?<str>[a-zA-Z0-9]*)'.AnsiCompare'((?<compareWith>"[^"]*")') == 0
并替换为
${str} == ${compareWith}
我将使用RegEx 将str.AnsiCompare("value")
替换为string.Compare(str, "value")
或者,您可以编写一个扩展方法,并简单地添加using,而不是所有的替换
public static int AnsiComapre(this string x, string y)
{
return String.Compare(x, y);
}