繁体   English   中英

将字符串与字符串数组匹配

[英]Matching a string against an array of strings

我有四个要与输入字符串匹配的操作数组。

我的尝试:

string[] operations = {"add","sub","mul","div"};
string rawInput = Console.ReadLine();
string[] inputs = rawInput.Split(delims,StringSplitOptions.RemoveEmptyEntries);
firstInput = inputs[0].Trim();

foreach (string operation in operations) 
{
    if (firstInput.Contains(operation))
        Console.WriteLine("Valid operation: {0}",operation);
}

如我所料,如果我输入add,sub,mul或div,这将打印Valid operation

为了输出无效输入的消息,我添加了如下条件:

else
{
    Console.WriteLine("Invalid operation: {0}", firstInput);
    break;
}

如果我现在输入sub ,我得到:

Invalid operation: sub

如果我删除break语句并输入sub

Invalid operation: sub
Valid operation: sub
Invalid operation: sub
Invalid operation: sub

如何修改逻辑,以便只收到一次正确的消息?

查看第一个输入是否在您的有效操作列表中,而不是相反(使用LINQ):

if (operations.Contains(firstInput))
{
  Console.WriteLine("Valid operation: {0}", firstInput);
}
else
{
  Console.WriteLine("Invalid operation: {0}", firstInput);
}

如果已经遍历列表,那么这是一种选择:

bool foundValidOP = false;
foreach (string operation in operations) 
{
    if (firstInput.Equals(operation, StringComparison.InvariantCultureIgnoreCase))
    {
        foundValidOP = true;
        break;
    }
}

if (foundValidOP)
{
  Console.WriteLine("Valid operation: {0}", firstInput);
}
else
{
  Console.WriteLine("Invalid operation: {0}", firstInput);
}

您的foreach循环会遍历operations每个条目,因此您的逻辑是不正确的,因为如果输入与operations中的第一个元素(即"add" )不匹配,则它将超出循环。 如果发现有效操作,您确实想跳出循环,否则继续扫描。 这是一些示例代码:

bool validOperation = false;
foreach (string operation in operations) 
{
    if (firstInput.Contains(operation))
    {
        Console.WriteLine("Valid operation: {0}",operation);
        validOperation = true;
        break;
    }
}
if (!validOperation)
{
    Console.WriteLine("Invalid operation: {0}", firstInput);
}

您可以尝试以下方法:

string[] operations = { "add", "sub", "mul", "div" };
var firstInput = "sudb";

var x = operations.SingleOrDefault(o => o == firstInput);

if (x != null)
    Console.WriteLine("Valid:" + x);
else
    Console.WriteLine("Invalid:" + firstInput);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM