2017-02-21 2 views
0

Как сделать, чтобы проверить следующие аргументы командной строки: инвентарь make = Honda desc by_count всего - have make =?Как использовать indexOf() в аргументах командной строки?

Я создал String [] savedArgs поэтому я передать все аргументы в массив, но нет IndexOf() для массивов так I`ma немного потерял сейчас ...

Я хочу быть умеет искать make = в аргументах командной строки, поэтому я могу использовать соответствующий метод для отображения списка в соответствии с автомойкой. Все, что я мог сделать, это использовать contains() для поиска точных совпадений (например: make = Honda или make = BMW), но таким образом я бы повторил один и тот же код много раз, и я считаю, что это плохой дизайн.

Заранее спасибо

+0

Поскольку у вас есть массив строк, вы можете перебирать этот массив и проверять каждую отдельную строку - там у вас есть все необходимые вам методы, такие как 'matches()', 'indexOf' и т. Д. В качестве альтернативы вы можете использовать библиотеку cli, например [Apache Commons CLI] (https://commons.apache.org/proper/commons-cli/), чтобы упростить обработку командной строки. – Thomas

ответ

1

Существует не встроенный indexOf или аналогичный метод, который работал бы готовым к тому, что вы хотите. Один из вариантов:

final String makeArgPrefix = "make="; 
    Optional<String> makeArg = Stream.of(args) 
      .filter(arg -> arg.startsWith(makeArgPrefix)) 
      .findAny(); 
    makeArg.ifPresent(arg -> System.out.println(arg.substring(makeArgPrefix.length()))); 

Для этого требуется Java 8, поскольку я использую потоки. С make=Honda в аргументах командной строки печатается

Honda 

Она не принимает во внимание, что более чем один аргумент командной строки можно было бы начать с name=. Он может быть уточнен в зависимости от ваших точных требований.

Позвольте мне добавить, что стандартная интерпретация аргументов командной строки обрабатывает их все слева направо (разумная вещь, если вы не хотите игнорировать некоторые). Что-то вроде

for (String arg : args) { 
    if (arg.equals("desc") { 
     ascending = false; 
    } else if (arg.startsWith(makeArgPrefix) { 
     make = arg.substring(makeArgPrefix.length()); 
    } else if // and so on 

} 

Конечно, сделайте это так, чтобы оно соответствовало вашей конкретной ситуации.

+0

Удивительный! Благодаря!! – Fodrigoal

1

Если вы хотите обрабатывать входные аргументы самостоятельно, вы можете проверить, если каждый аргумент содержит подстроку вашего имени аргумента («сделать =»), а затем разбить строку:

String make = ""; 
for (String arg : savedArgs) { 
    if (arg.contains("make=")) { 
     make = arg.split("make=")[1]; 
    } 
} 

Повторите для каждого аргумента при необходимости.

Лучшим решением может быть использование Apache Commons CLI.

+0

или использовать getopt: https://www.gnu.org/software/gnuprologjava/api/gnu/getopt/Getopt.html –

Смежные вопросы