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