【问题标题】:Matching a string against an array of strings将字符串与字符串数组匹配
【发布时间】:2011-12-10 19:42:44
【问题描述】:

我有一个包含四个操作的数组,我想与输入字符串进行匹配。

我的尝试:

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 条件:

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

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

【问题讨论】:

    标签: c#


    【解决方案1】:

    查看第一个输入是否在您的有效操作列表中,而不是相反(使用 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);
    }
    

    【讨论】:

    • 感谢奥德。我真的很喜欢你的回答,但目前正在处理一些基本的字符串操作。
    【解决方案2】:

    您的foreach 循环遍历operations 中的每个条目,因此您的逻辑不正确,因为如果输入与operations 中的第一个元素不匹配(即@ 987654324@)。如果找到有效操作,您真的想跳出循环,否则继续扫描。下面是一些示例代码:

    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);
    }
    

    【讨论】:

    • 谢谢 chess007。我更喜欢这个答案,非常感谢您向我解释为什么逻辑不正确。
    【解决方案3】:

    你可以试试这个:

    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);
    

    【讨论】:

      猜你喜欢
      • 2021-04-28
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      • 2016-01-23
      • 1970-01-01
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      相关资源
      最近更新 更多