【问题标题】:Java main method argument handling, depending on user inputJava 主方法参数处理,取决于用户输入
【发布时间】:2012-02-07 17:55:04
【问题描述】:

我想知道如何比较传递给 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() 代替..

【问题讨论】:

  • 您需要向我们展示实际代码
  • 要检查字符串是否相等,您必须使用equals。此外,在else 子句中,您使用arg 而不是args
  • 有点离题,但不要使用'=='比较字符串。比较参考;使用"-i".equals(args[0])
  • 因为编写这种代码很乏味,许多开发人员创建了自己的库类来处理main 方法的参数。我自己的库类可以在on Github 找到,它允许您简单地指定一个名为“i”的标志是允许的,然后允许您在调用 Java 应用程序时检查它是否提供。

标签: java arrays arguments main


【解决方案1】:

你给出的代码甚至无法编译,但是这个确实工作:

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 而不是==,正如其他人已经指出的那样。)

【讨论】:

  • 谢谢.. 我知道这是一个业余问题.. 在 asp.net 中编码已经 3 年了,我的 java 已经生锈了..
  • @JohnMarston:Java 和 C# 之间的区别解释了 ==equals,但它没有解释为什么你得到了 IndexOutOfBoundsException - 你只是错过了else
【解决方案2】:

比较字符串时,您需要使用 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);
        }
    }
}

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

【讨论】:

    【解决方案3】:

    有没有将字符串数组args中的字符串转换成字符串类型以便我比较?

    您不需要转换它。但是,您确实需要以正确的方式进行比较;例如

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

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


    但是,这并不能解释您收到IndexOutOfBoundsException 的原因。我需要查看真实代码来回答这个问题。

    【讨论】:

      猜你喜欢
      • 2013-05-19
      • 2018-12-16
      • 2016-09-08
      • 2011-03-28
      • 1970-01-01
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多