【问题标题】:How can I read input as two different answers如何将输入读取为两个不同的答案
【发布时间】:2011-06-14 20:01:13
【问题描述】:

假设我得到以下问题

Console.WriteLine("哪支球队曾交锋?- 使用红蓝格式");

那么我对上述问题的回答将有两个团队。但是如何将它们读为两个独立的呢? 所以我只读[红色] [蓝色],但中间的“vs”部分就在那里。

我希望你能理解我想说的话。我的英语不太好。

最好的问候,

ps,你可以说我是编程新手。

编辑:哦,这都是用 C# 编写的

【问题讨论】:

  • 你总是需要'vs'之前和'vs'之后的值吗?
  • 哦,我两个都需要。然后拆分成两个字符串。

标签: c#


【解决方案1】:

你可以使用String.Split():

var answers = userInput.Split(new String[] { "vs" }, StringSplitOptions.RemoveEmptyEntries);
if (answers.Length == 2) {
    var red = answers[0];
    var blue = answers[1];
}

【讨论】:

  • 希望它总是 vs 而不是 vs
  • 使用上面的代码,var red = "哪些球队曾交锋?-使用," and var blue = "Blue format"
  • 我认为您将文本“使用红色与蓝色格式”解释为用户答案的​​格式。对我来说,这是指导性的 - 即在提供答案时请使用“RED vs BLUE”格式。用户可能输入的内容:RedTeam1 vs BlueTeam5。
  • @V4Vendetta - 很好,String.Split() 区分大小写,因此“vs”的任何变体都需要特殊处理:Vs、VS、vS。它们可以只包含在数组初始值设定项中。
  • 哦,谢谢,会记住这一点。我会把它放在问题中,所以用户不要做错了。这样我就不必投入更多的工作了。
【解决方案2】:

有很多选项可以使用 Split 函数使其成为数组并删除“vs” 或者简单地使用 String.Replace("vs","") 函数将“vs”字符串替换为空白值。

【讨论】:

    【解决方案3】:

    您可以尝试使用正则表达式:

    Match m = Regex.Match("^(?<team1>\.+) vs (?<team2>\.+)$", userInput);
    if (m.Success)
    {
        string team1 = m.Groups["team1"].Value;
        string team2 = m.Groups["team2"].Value;
    }
    

    请注意,这在语法上可能不是 100% 正确 - 您必须稍微参考一下 IntelliSense - 例如,我不确定该模式是 Match 中的第一个参数还是第二个参数,但我'我确定你明白了。

    【讨论】:

    • 一个小问题 - (?.+) 是标准的吗?带着所有的问号和符号。而且,如果我将“T”大写,这是否意味着只接受大写单词。这不是你不知道就必须找出的东西——只是我不在一个可以测试它的地方。
    • 对不起,我没读到你是 C# 的新手 :-) 这个 (?&lt;team1&gt;...) 东西在正则表达式中形成了一个“命名组”。括号构成一个组,您通常只能通过索引访问。 ?&lt;xyz&gt; 为组命名,因此您可以使用名称来访问组的值,如果您有嵌套组,这会更容易。 team1team2 是完全任意(但唯一)的名称 - 它们对正则表达式的计算方式没有任何影响。 \.+ 很重要。它说:“至少一个字符”。
    • 正则表达式的意思是:“查找文本'vs'前后的所有内容,并将第一部分命名为'team1',第二部分命名为'team2',这样我们以后可以得到匹配的值按名称”。
    • 哦,非常感谢您的解释。这对我来说真的很清楚。我想我可以将此代码用于我的项目。我希望我回家后可以继续我的工作。实际上,我会出于学习目的尝试所有这些。
    【解决方案4】:

    你可以把所有的字符串读成一个字符串,然后用“vs”分隔符分割,然后你会得到你需要的2个字符串的表

    【讨论】:

      【解决方案5】:

      按照其他人的建议,使用 String.Split 函数。这会将您的字符串拆分为字符串数组。然后,确定数组中的哪个字符串是“vs”字符串。取“vs”之前和“vs”之后的索引值。例如:

      string input = "Which teams have faced eachother? - use Red vs Blue format";
      string[] inputArray = input.Split( ' ' );
      
      int vsLocation = 0;
      
      for ( int i = 0; i < inputArray.Length; i++ ) {
          if ( inputArray[i] == "vs" ) {
              vsLocation = i;
              break;
          }
      }
      
      if ( vsLocation > 0)  {
          string team1 = inputArray[vsLocation - 1];
          string team2 = inputArray[vsLocation + 1];
      }
      

      【讨论】:

      • 澄清一下,当您使用 String.Split() 时,分隔符项目不会像您在答案中提到的那样出现在结果中。
      • 我自己只需要一分钟来编写代码。根据你上面的回答,你是对的。但是,我使用空格作为分隔符。
      • 不应该 if (inputArray[i] == "vs" ) { 像 "vs" 这样空格也消失了
      • 没有。字符串将根据空格进行拆分,因此不会包含空格本身。
      • 在我最初的修订中也注意到了一些错误。这是一个工作示例。
      猜你喜欢
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 2020-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多