如何使用Split()在C#中制作命令系统

时间:2018-09-30 07:08:00

标签: c#

我想做这样的事情:

string a = Console.Readline();
string[] b = a.Split(' ');
string i = b[0];
string j = b[1];

现在的问题是,放置'string j'可能是可选的,就像输入可能是hi hello,这里hello是可选的。如果有人没有放置任何东西来打招呼,如何使代码正常工作。

谢谢。

3 个答案:

答案 0 :(得分:0)

由于用户输入的“命令”将在b之后存储在数组中(例如,基于您的代码的split),所以我认为没有必要将它们单独存储自己变数。因此,避免了当前设置中的问题。另一方面,如果要查看是否键入了特定的“命令”,则可以执行以下操作:

    static void Main(string[] args)
    {
        Console.Write("> ");

        string input = Console.ReadLine();

        // Doing it like this will automatically remove blanks from the resulting array
        // so you won't have to clean it up yourself
        string[] commands = input.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);

        // Contains is from the System.Linq namespace
        // this will allow you to see if a given value is in the array
        if (commands.Contains("hi"))
        {
            Console.WriteLine("> The command 'hi' has been received.");
        }

        Console.Read();
    }

您可以使用Linq的Contains方法检查命令字符串数组中是否存在特定值。

如果您只想查看数组中的所有命令,那么简单的for loop就足够了。

        // The Length property of the array will give you the
        // number of items it contains
        for(int i = 0; i < commands.Length; i++)
        {
            Console.WriteLine("> Command read: {0} ", commands[i]);
        }

还有一件事情,我建议您对应用程序将收到的输入进行规范化,以避免在过滤输入时出现问题。您可以通过调用ToLower可用的ReadLine方法来做到这一点:

      string inputs = Console.ReadLine().ToLower();

快乐编码:)

答案 1 :(得分:0)

您可以使用Length属性检查拆分数组中有多少个元素。

如果数组中没有足够的元素来分配可选值,则可以将其设置为null

在其余代码中,您只需要在使用可选值之前对它进行空检查。

他喜欢的东西会起作用:

string input = Console.ReadLine(); 
string[] tokens = input.Split(' ');

string hi = tokens[0];
string optional = tokens.Length > 1 ? tokens[1] : null; // make sure we have enough elements

Console.WriteLine(hi);

// null check before using the optional value
if (optional != null)
    Console.WriteLine(optional);

// or 
Console.WriteLine(optional ?? "Optional value is null..");

答案 2 :(得分:0)

我不是使用索引位置访问数组特定元素,而是使用foreach循环遍历列表:

string a = Console.ReadLine();
string[] b = a.Split(' ');

foreach (string elem in b)
{
   Console.WriteLine(elem); // Do whatever you want with each element
}
Console.ReadLine();