Вы можете использовать артефакт refcodes-console
на refcodes-console на REFCODES.ORG:
Option<String> r = new StringOptionImpl( "-r", null, "opt1", "..." );
Option<String> s = new StringOptionImpl( "-S", null, "opt2", "..." );
Operand<String> arg1 = new StringOperandImpl( "arg1", "..." );
Operand<String> arg2 = new StringOperandImpl( "arg2", "..." );
Operand<String> arg3 = new StringOperandImpl( "arg3", "..." );
Operand<String> arg4 = new StringOperandImpl( "arg4", "..." );
Switch test = new SwitchImpl( null, "--test", "..." );
Option<String> a = new StringOptionImpl( "-A", null, "opt3", "..." );
Condition theRoot = new AndConditionImpl( r, s, a, arg1, arg2, arg3, arg4,
test );
Создайте ваш парсер аргументов ArgsParserImpl
с вашим корневым условием:
ArgsParser theArgsParser = new ArgsParserImpl( theRoot );
theArgsParser.setName( "MyProgramm" );
theArgsParser.setSyntaxNotation( SyntaxNotation.GNU_POSIX );
Выше вы определяете свой синтаксис, ниже вы вызываете парсер:
theArgsParser.printUsage();
theArgsParser.printSeparatorLn();
theArgsParser.printOptions();
theArgsParser.evalArgs( new String[] {
"-r", "RRRRR", "-S", "SSSSS", "11111", "22222", "33333", "44444",
"--test", "-A", "AAAAA"
} );
В случае, если вы предоставили несколько хороших описаний, theArgsParser.printUsage()
даже покажет вам довольно печатное использование:
Usage: MyProgramm -r <opt1> -S <opt2> -A <opt3> arg1 arg2 arg3 arg4 --test
В приведенном выше примере все определенные аргументы должны быть переданы пользователем, иначе парсер обнаружит неправильное использование. Если переключатель --test
должен быть необязательный (или любой другой аргумент), присвойте theRoot
следующим образом:
theRoot = new AndConditionImpl (r, s, a, arg1, arg2, arg3, arg4, new OptionalImpl (test) );
Тогда ваш синтаксис выглядит следующим образом:
Usage: MyProgramm -r <opt1> -S <opt2> -A <opt3> arg1 arg2 arg3 arg4 [--test]
Полный пример вашего дела вы найдете в StackOverFlowExamle . Вы можете использовать условия AND, OR, XOR и любые виды вложений ... надеюсь, это поможет.
Оцените проанализированные аргументы следующим образом: r.getValue() );
или if (test.getValue() == true) ...
:
LOGGER.info( "r :=" + r.getValue() );
LOGGER.info( "S :=" + s.getValue() );
LOGGER.info( "arg1 :=" + arg1.getValue() );
LOGGER.info( "arg2 :=" + arg2.getValue() );
LOGGER.info( "arg3 :=" + arg3.getValue() );
LOGGER.info( "arg4 :=" + arg4.getValue() );
LOGGER.info( "test :=" + test.getValue() + "" );
LOGGER.info( "A :=" + a.getValue() );