【问题标题】:c# Set an port number (integer value) if a specific key is entered? c#c#如果输入特定键,设置端口号(整数值)? C#
【发布时间】:2013-03-10 19:42:02
【问题描述】:

如果在文本中找到某个键​​,我试图能够存储一个整数。

key 可以是字符串中的任意位置,例如:

-p 40 Bond "James bond"

bond "james bond" -p 40

bond -p 40 "james bond"

所以 int 端口 = 40。

这是我的尝试,但是当端口返回为 0 时,它已经很糟糕了。

if (mystring.Contains("-p"))
    {
        string sport = "";
        string[] splits = mystring.Split(' ');
        for (int i = 0; i < splits.Length; i++)
        {
            if (splits[i].Contains(" "))
                sport = splits[i].Trim();
        }

        int.TryParse(sport, out port);

        Console.WriteLine(port);
        return;
    }

端口号紧跟在-p 之后。可以这样做吗?

【问题讨论】:

    标签: c# string set


    【解决方案1】:

    这样的事情应该可以工作:

    string[] splits = mystring.Split(' ');
    for (int i = 0; i < splits.Length; i++)
    {
        if (splits[i] == "-p")
        {
            sport = int.Parse(splits[i+1]);
        }
    }
    

    一旦您检测到-p,您希望将 next 条目解析为您的端口值。

    【讨论】:

    • 我会将循环条件更改为i &lt; splits.Length - 1 以避免出现异常,以防在-p 之后没有传递任何内容
    • @digEmAll:在那种情况下,我认为这是一个无效的命令行,可能应该抛出异常
    • 这非常有效。我非常感谢您的回答(我无法再选择几分钟的答案)。为什么我没有想到这个??
    • 如果字符串参数包含-p作为键的一部分,此方法将失败。例如,mystring = "bond -p 40 \"james -p 300 bond\""。此外,此方法计算最后一次出现的 -p
    • 我认为对于我正在做的事情,这很好。是的,我会处理异常,谢谢
    【解决方案2】:

    你可以使用正则表达式如

            string pattern = @"-p (\d+)";
            string input = "sdf -p 400 sdfa";
    
            var matched = Regex.Match(input, pattern);
            var port = matched.Groups[1].Value;
    

    port 会给出 400

    【讨论】:

      猜你喜欢
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-28
      • 2010-09-09
      • 2010-10-26
      相关资源
      最近更新 更多