1

我需要在我正在制作的控制台应用程序中的空格上拆分用户输入,但我不太确定该怎么做。我不能只是盲目地拆分它,因为它会引用字符串和类似的东西。有什么快速方法可以做到这一点?

或者有什么方法可以访问 Windows 命令行解析器并使用它来拆分它?

4

5 回答 5

3

在 Visual Studio 中创建新的控制台应用程序时,您会得到如下内容:

class Program
{
    static void Main(string[] args)
    {
    }
}

传递给应用程序的命令行参数将在“args”参数中。

于 2012-07-16T17:52:48.010 回答
1

控制台应用程序中的用户输入很简单:Console.ReadLine()

您可能想尝试这样的事情:

static void Main(string[] args)
{
    Console.WriteLine("Input please:");
    string input = Console.ReadLine();
    // Parse input with Regex (This splits based on spaces, but ignores quotes)
    Regex regex = new Regex(@"\w+|""[\w\s]*""");
}
于 2012-07-16T18:14:54.517 回答
0

要将输入读取为字符串,我将使用:

string stringInput = Console.ReadLine();
于 2012-07-16T18:15:35.123 回答
0

好吧,您必须构建自己的“转换器”。基本上,在你的 main 中,你可以只有一个switch语句和一个Console.ReadLine(). 当用户运行您的可执行文件时,您可以输出类似的内容Enter Command:并等待用户输入。然后只需捕获用户输入并打开它。

class Program
{
    static void Main(string[] args)
    {       
        string cmd = Console.ReadLine();
        switch(cmd)
        {
            case "DoStuff":
                someClass.DoStuff();
                break;
            case "DoThis":
                otherClass.DoThis();
                break;
        }       
    }
}

如果你想继续接收来自用户的输入命令,那么只需将类似的东西包装在一个 while 循环中,当用户想要Quit跳出循环并终止程序时。

于 2012-07-16T18:19:46.333 回答
0

感谢这个答案,我终于明白了。这会检查引号,但不担心嵌套引号。根据对该答案的评论,它如何知道它是两个引号还是嵌套引号。您不能真正使用空格,因为字符串可以以空格开头或结尾。

using System.Text.RegularExpressions;
...
Console.Write("Home>");
string command = Console.ReadLine();
Regex argReg = new Regex(@"\w+|""[\w\s]*""");
string[] cmds = new string[argReg.Matches(command).Count];
int i = 0;
foreach (var enumer in argReg.Matches(command))
{
    cmds[i] = (string)enumer.ToString();
    i++;
}
于 2012-07-16T20:25:50.190 回答