如何查找字符串中第一个超过 1 个字符的实例

1 c# string

我想看看是否有更好的方法来确定两个字符中的哪个字符是否首先出现在字符串中。

我当前的代码是

string UserInput = Console.Readline;
char FirstFound;

if (UserInput.IndexOf('+') > UserInput.IndexOf('-') )
{
    FirstFound = '+';
}
else
{
    FirstFound = '-';
}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法允许多于 1 个输入,因此可以简化此操作?或者还有什么可以缩短这个时间吗?

Joe*_*orn 5

您可以通过理解代码有效地将字符-作为默认值来缩短它,因为它是块的结果else。考虑到这一点,我们可以这样做来删除该else块:

\n
string UserInput = Console.Readline();\nchar FirstFound = '-';\n\nif (UserInput.IndexOf('+') > UserInput.IndexOf('-') )\n{\n    FirstFound = '+';\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我们也可以这样做,虽然不会更短,但性能会更好:

\n
string UserInput = Console.ReadLine();\nchar FirstFound;\nforeach(char c in UserInput)\n{\n    if (c == '+' || c == '-')\n    {\n        FirstFound = c;\n        break;\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我们可以缩短它以使用 linqFirstOrDefault()方法:

\n
string UserInput = Console.ReadLine();\nchar FirstFound = UserInput.FirstOrDefault(c => "-+".Contains(c));\n
Run Code Online (Sandbox Code Playgroud)\n

如果您希望能够扩展它以允许两个以上的搜索目标,您可以将目标添加到字符串中,如下所示,无需额外的代码行:

\n
string UserInput = Console.ReadLine();\nchar FirstFound = UserInput.FirstOrDefault(c => "-+*/x\xc3\xb7".Contains(c));\n
Run Code Online (Sandbox Code Playgroud)\n