Обработка аргументов основного метода Java в зависимости от пользовательского ввода - PullRequest
0 голосов
/ 11 января 2012

Я хотел бы знать, как мне сравнить аргументы, передаваемые в основной метод java.

eg java hello -i

Я попытался напечатать args [0], и он действительно дает мне -i.однако, чего я хочу достичь:

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

Однако я продолжаю получать индекс из связанной исключительной ситуации.В любом случае можно ли преобразовать строку в аргументах строкового массива просто в строковый тип, чтобы я мог ее сравнить?

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


}

Например, если они запускают программу без аргументов, я вызову метод init (),но если они введут -i в качестве аргументов, я вместо этого вызову install () ..

Ответы [ 3 ]

3 голосов
/ 11 января 2012

Код, который вы дали, даже не скомпилируется, но этот работает :

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 вместо ==, как уже отмечали другие.)

0 голосов
/ 11 января 2012

При сравнении строк вам нужно использовать метод 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);
        }
    }
}

Попробуйте вызвать его без аргументов, первым аргументом или другими аргументами.

0 голосов
/ 11 января 2012

В любом случае можно ли преобразовать строку в аргументах строкового массива просто в строковый тип, чтобы я мог ее сравнить?

Вам не нужно преобразовывать ее.Тем не менее, вам do нужно сравнить это правильно;Например,

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

(Если вы используете == для сравнения строк, у вас могут возникнуть проблемы. Оператор == проверяет, указывают ли две ссылки на один и тот же объект. Что вам действительно нужно?чтобы увидеть, если две строки содержат одинаковые символы ... и вам нужно использовать метод equals, чтобы сделать это.)


Однако это не объясняет, почему вы получили IndexOutOfBoundsException.Мне нужно увидеть реальный код, чтобы ответить на этот вопрос.

...