我需要在我正在制作的控制台应用程序中的空格上拆分用户输入,但我不太确定该怎么做。我不能只是盲目地拆分它,因为它会引用字符串和类似的东西。有什么快速方法可以做到这一点?
或者有什么方法可以访问 Windows 命令行解析器并使用它来拆分它?
我需要在我正在制作的控制台应用程序中的空格上拆分用户输入,但我不太确定该怎么做。我不能只是盲目地拆分它,因为它会引用字符串和类似的东西。有什么快速方法可以做到这一点?
或者有什么方法可以访问 Windows 命令行解析器并使用它来拆分它?
在 Visual Studio 中创建新的控制台应用程序时,您会得到如下内容:
class Program
{
static void Main(string[] args)
{
}
}
传递给应用程序的命令行参数将在“args”参数中。
控制台应用程序中的用户输入很简单: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]*""");
}
要将输入读取为字符串,我将使用:
string stringInput = Console.ReadLine();
好吧,您必须构建自己的“转换器”。基本上,在你的 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
跳出循环并终止程序时。
感谢这个答案,我终于明白了。这会检查引号,但不担心嵌套引号。根据对该答案的评论,它如何知道它是两个引号还是嵌套引号。您不能真正使用空格,因为字符串可以以空格开头或结尾。
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++;
}