[英]How do you parse arguments for a java program?
我正在制作一个Selenium WebDriver Java程序。 我有25个应用程序和4个环境。 我需要能够通过-app app1 app2 app3 ... appn -env env1 env2 envn之类的东西
我需要既可以传递任何一个参数,也可以不传递两个参数。 现在,我可以按此顺序传递一个应用程序和一个环境,但是我需要能够按任一顺序进行操作,并且不能同时执行两种操作。 到目前为止,这就是我所拥有的。 有了这个,我要么不传递任何参数,就为每个环境(这就是我想要的)运行每个应用程序,要么我可以按顺序为特定测试选择app1 env1。
public static Application chooseAppTest(String[] args)
{
Application application = null;
switch (Application.valueOf(args[0]))
{
case ACCOUNTINVENTORY:
new AccountInventory(Environment.valueOf(args[1]));
AccountInventory.accountInventoryDatabaseTests(testResults);
break;
if (args.length == 0)
{
LogIn.loginTest(testResults);
DatabaseTest.testResults(testResults);
LinkTest.linkTests(testResults);
}
else
{
// First choose application, then choose environment
Application.chooseAppTest(args);
}
我认为不需要递归。 您可以执行以下操作:
public static void main (String[] args)
{
List<String> apps = new LinkedList<>();
List<String> envs = new LinkedList<>();
List<String> current = null;
// parse arguments
for (String arg : args)
{
if (arg.equals("-app")) current = apps;
else if (arg.equals("-env")) current = envs;
else if (current != null) // add argument
current.add(arg);
}
// parsing finished
Application.doSomethingWith(apps, envs);
}
使用递归是不必要的,也不是有利的。 您可以将所有参数读入数组并从那里处理它们。 除此之外,我不确定您将如何进行。 通过这样排列参数,您如何知道哪个环境与哪个应用程序一起使用?
正如Elliott所说,您是否看过Apache Commons CLI ? 这是一个命令行解析器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.