Java主方法参数处理,取决于用户输入

时间:2012-01-11 11:09:09

标签: java arrays arguments main

我想知道如何比较传递给java main方法的参数。

eg java hello -i

我试过打印args [0],确实给了我-i。但是我想要实现的是:

if args.length == 0 {
  do something
}
else if args[0] =="-i"{
  do something
}

然而,我一直在索引超出约束的异常。无论如何将字符串数组args中的字符串转换为字符串类型,以便我可以比较它吗?

public static void main(String[] args) {
  if args.length == 0 {
    do something
  }
  else if args[0] =="-i"
    do something
  } 


}

例如,如果他们没有任何参数启动程序,我将调用init()方法。但如果他们输入-i作为参数,我将调用install()而不是..

3 个答案:

答案 0 :(得分:3)

您提供的代码甚至无法编译,但 工作:

public class Test {
    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("No arguments!");
        } else if (args[0].equals("-i")) {
            System.out.println("-i passed");
        } else {
            System.out.println("Something else");
        }
    }
}

请注意,您在此处使用else非常重要 - 这会失败,例如:

if (args.length == 0) {
    System.out.println("No arguments!");
}
if (args[0].equals("-i")) {
    System.out.println("-i passed");
}

此时您正在检查args[0] ,即使数组的长度为0 。鉴于您此刻已经给出了伪代码(没有括号围绕条件),我想知道这是否是您真实代码中的问题。

(另请注意,正如其他人已经指出的那样,使用equals代替==。)

答案 1 :(得分:0)

  

是否有将字符串数组args中的字符串转换为字符串类型以便我可以比较它?

您无需转换它。但是,你需要以正确的方式进行比较; e.g。

if (args.length == 0) {
   // do something
} else if (args[0].equals("-i")) {
   // do something else 
}

(如果你使用==来比较字符串,你可能会遇到麻烦。==运算符会测试两个引用是否指向同一个对象。你真正需要的是看到如果两个字符串包含相同的字符...并且您需要使用equals方法来执行此操作。)


但是,这并不能解释您获得IndexOutOfBoundsException的原因。我需要看到真正的代码才能回答这个问题。

答案 2 :(得分:0)

比较字符串时,您需要使用 equals()方法作为 == 比较,如果它们是相同的字符串(与它们相同时不相同)。

这是一个例子

public static void main(String[] args) {
    if (args.length == 0) {
        System.err.println("No arguments");
    } else if (args.length == 1) {
        if (args[0].equals("first")) {
            System.err.println("The argument equals 'first'");
        } else {
            System.err.println("Don't know what you want with " + args[0]);
        }
    } else {
        System.err.println("Will not use the arguments");
        for (String arg: args) {
            System.err.println(arg);
        }
    }
}

尝试不带参数,参数或任何其他参数调用它。