如何用程序将字符串上的整数比较替换为布尔比较

本文关键字:比较 整数 替换 布尔 何用 程序 字符串 | 更新日期: 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);
}