如何从命令行参数中拆分字符串? - Java

时间:2014-07-31 14:35:02

标签: java split command-line-arguments

基本上在命令行中,我的参数将类似于

-app app1 app2 app3 -env env1 env2 //the number can go higher then 3 and 2 

我有应用程序的枚举和envs的枚举

我知道最简单的方法是使用库并与之合作但这对我来说不是一个选择。我试图从Java splitting command line argument

中读取我的内容

来自Passing command line argument with spaces 并把它放在一起,但它没有成功

我认为我需要做的就是在看到" -app"然后将之后的内容添加到列表中,直到我看到" -env"所以我想分开" - "。我从不拆分命令行参数或数组。这就是我到目前为止所尝试的内容。(我把if部分拿出来因为我知道那部分是有效的,并且不涉及任何事情)

public static void main(String[] args) 
{
    boolean sawApp = false;
    boolean sawEnv = false;
    List<String> appList = new ArrayList();
    List<String> envList = new ArrayList();


    else if(args.length > 0)
    {
        for(int i = 0; i < args.length; i ++)
        {
            if(args.equals("-app"))
            {
                sawApp = true;
                String[] apps = //this is where I am stuck
            }
            else if(args.equals("-env")
            {
                sawEnv = true;
                String[] env = //this is where I am stuck
            }
        }

    }

然后在解析这些之后需要接受它们并运行我在代码顶部的方法

public static Application chooseAppTest(String[] args) 
    {
        Application application = null;

        switch (application)
        {
        case ACCOUNTINVENTORY:

2 个答案:

答案 0 :(得分:5)

我会使用args4j。任何正确的尝试&#34;手动解析命令行参数是徒劳无益和轮子重塑的练习。

答案 1 :(得分:0)

如果可以将数组放入完整的字符串:

String args = "-app app1 app2 app3 -env ev1 env2";
String[] splitDashes = args.split("-");
List<String> appList = new ArrayList();
List<String> envList = new ArrayList();

for(String split : splitDashes){
    String[] splitSpaces = split.split(" ");
    if (splitSpaces[0].equals("app"))
    {
        for(String s : splitSpaces){
            if(!s.equals("app"))
                appList.add(s);
        }
    }
    else if(splitSpaces[0].equals("env"))
    {
        for(String s : splitSpaces){
            if(!s.equals("env"))
                envList.add(s);
        }
    }
}

好吧,我终于想出了一个解决方案,假设-app永远是第一位的。这是String [] args数组:

public void DoSomething(){
    String[] args = {"-app", "app1", "app2", "app3", "app4", "app5", "-env", "env1", "env2", "env3", "env4"};
    List<String> appList = new ArrayList();
    List<String> envList = new ArrayList();

    int indexOfApp = -1;
    int indexOfEnv = -1;

    for(int i = 0; i<args.length; i++){
        if(args[i].equals("-app")){
            indexOfApp = i;
        }else if(args[i].equals("-env")){
            indexOfEnv = i;
        }
    }

    int countOfApp = -1;
    int countOfEnv = -1;

    if(indexOfApp != -1 && indexOfEnv != -1){
        countOfApp = indexOfEnv - 1;
        countOfEnv = args.length - (indexOfEnv + 1);
    }


    System.out.println(countOfApp);
    System.out.println(countOfEnv);

    for(int appIndex = indexOfApp; appIndex < countOfApp; appIndex++){
        appList.add(args[appIndex]);
    }

    for(int envIndex = indexOfEnv + 1; envIndex < args.length; envIndex++){
        envList.add(args[envIndex]);
    }


    Assert.assertEquals(5, appList.size());
    Assert.assertEquals(4, envList.size());

}