2014-04-24 3 views
3

M tryng для использования apache commons cli, My use case - это переменное количество аргументов с некоторыми параметрами.синтаксический анализ командной строки с использованием apache commons cli

Say

-p str1 str2; 

Это может быть

-p str1 str2 str3 .. strn 

Другой

-m str1 
-h 

с

cmdline.getOptionValues("p"); 

Он извлекает только последнюю строку. Как я могу получить все значения для определенной опции?

Edit:

if(cmdline.hasOption("p")){ 
String[] argsList = cmdline.getOptionValues(p); 
    String strLine = Arrays.toString(argsList); 
    argsList = strLine.split(","); 
} 

M я делаю это правильно? строка будет состоять из точно данных, которые я хочу, или smithng неожиданных пробелов r anythng else?

+0

Пожалуйста, разместите полный код, который вы используете, включая создание вашего синтаксического анализатора и параметров. – helmy

+0

Почему вы набиваете массив в строку, используя Arrays.toString(), а затем отбрасываете ее обратно? Пожалуйста, разместите полный код, который вы используете, чтобы мы могли видеть, какие параметры и т. Д., И чтобы другие могли извлечь выгоду. – helmy

ответ

4

Использование hasArgs() со значением сепаратором, установленным на запятой, поэтому опция становится

-p str1,str2,str3,...,strn 

Это как многозначные параметры обрабатываются в CLI

+0

да, его работа для меня .. thx :) – user3505394

+0

hey m можно разделить строки bt m gettng неожиданный результат позже, как и сравнение, возвращает false, где ожидается true.I будет отправлять код hw m fetchng strings – user3505394

+0

Я рекомендую вам спросить новый вопрос для этого, а не для изменения текущего вопроса. –

1

Это не совсем ясно мне, что вы» re и где «он возвращает false», но это должно работать, и я думаю, что вы делаете то, что пытаетесь сделать.

final CommandLineParser cmdLinePosixParser = new PosixParser(); 
Options options = new Options(); 
options.addOption(OptionBuilder.withArgName("p").hasArgs().create("p")); 
CommandLine commandLine = cmdLinePosixParser.parse(options, args); 
if (commandLine.hasOption("p")) { 
    String[] pArgs = commandLine.getOptionValues("p"); 
    System.out.println(pArgs.length); 
    for (String p : pArgs) { 
     System.out.println(p); 
    } 
} 
+1

Спасибо за код. Я понял свою ошибку. – user3505394

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