繁体   English   中英

您如何解析Java程序的参数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM