当前位置: 首页 > 工具软件 > JOpt Simple > 使用案例 >

java解析命令_java 命令行解析工具包 jopt-simple

云景焕
2023-12-01

java 解析命令行工具包 jopt-simple

gradle依赖如下

compile 'net.sf.jopt-simple:jopt-simple:5.0.2'

maven依赖如下

net.sf.jopt-simple

jopt-simple

5.0.2

支持POSIX格式和GNU格式的命令行参数,短的选项参数格式and长的选项参数格式都支持。

短格式选项

短的选项参数,用一个-开头,后面跟一个数字或者字母;或者是一个英文的问号?,英文的点号.,英文的下划线_

短的选项参数支持单个参数值,值可以是必填的也可以是选填的,可以用如下格式:

在参数名后加个空格,如-d /tmp

紧跟在参数名后面,如-d/tmp

在参数名后用等号=连接,如-d=/tmp

为了实现一个参数对应多个参数值,可以多次使用同一参数名,每次对应一个参数值,例如-d /tmp -d /var -d /opt;

当使用了ArgumentAcceptingOptionSpec#withValuesSeparatedBy(char) "separated values"配置了分隔符时,多值可以用流式的方法书写,多个值可以用这里配置好的分隔符分割。例如

parser.accepts( "z" ).withRequiredArg()

.withValuesSeparatedBy( ',' );

OptionSet options = parser.parse( new String[] { "-z", "foo,bar,baz", "-z",

"fizz", "-z", "buzz" } );

使用options.valuesOf( "z" ) 得到的值如下[foo, bar, baz, fizz, buzz]

短的参数选项可以被聚合在一块写,例如-abc 可以看成是-a -b -c。如果这些参数是可以配置参数值的,那么后面的字符会被认定为参数值。

这里容易出错

如-d是可以配置参数值的,那么-dabc不会被看成-d -a -b -c,而是会把abc看成是-d参数的参数值。

如果参数值只包含两个短横线--,后面的字符不会被认定为参数

如果参数值只包含一个短横线-,那么不会被认为是参数值(虽然理论上-可以是一个参数值)。因为很多unix程序都会把单个-看成是内建的输入输出流。

长格式选项

长的选项参数,用2个--开头,跟着多个英文字符、数字、短线、问号、点号。单个-不能是长选项参数的第一个字符。

长的参数可以用缩写,只要缩写的唯一的。可以在OptionParser的构造函数中配置是否可以使用缩写。

长的选项参数接受单个参数值,值可以是必填也可以是选填。可以用如下格式:

在参数名后加个空格,如--directory /tmp

在参数名后用等号=连接,如--directory=/tmp

多个参数值的处理方式和短的参数格式一致。

参数名-W是保留字,当使用recognizeAlternativeLongOptions(boolean)配置了可识别替换长参数时,-W foo=bar将被看成是--foo=bar。

可以将-W当做是短的参数或者长参数的缩写,但是recognizeAlternativeLongOptions(boolean)会覆盖这种行为。

其他

当parser检测到一个参数的参数值是可选的,并且后面跟的一串字符“看上去”像是参数(不是参数值),那么这串字符就会认为是另一个参数,前一个参数没有参数值。

如果,另一方面,一个可选的参数值被识别为数字,那么参数值将被看作是一个负数,即使parser识别出来相应的数字选项参数名。例如:

parser.parse("-a", "-2");

此时,参数a的值是-2, 不会将a, 2都当做是参数名。

有2种方法告诉parser识别哪些参数:

采用“流式”(fluent interface)风格的API设置options。采用accepts(String)或者acceptsAll(List)方法;调用链后面的方法描述了这个选项是否有参数值、参数值是必填还是选填,参数值应该转换成什么类型等。从版本3开始,这些方法调用返回OptionSpec,这将返回类型安全的参数值。

从版本1开始,一种更加简洁的方法用于设置短格式选项OptionParser。这些选项的参数值默认是String类型。以下是设置特定字符串的规则:

任务字符或者数字被当做是一个选项

一个选项可以紧跟一个星号,表明这个选项是help选项

如果一个选项字符紧跟一个冒号:,意味着这个选项需要必填参数值

如果一个选项字符紧跟两个冒号::,那么这个选项接受可选的参数值

否则,这个选项不接受参数值

如果一个选项用一个加号+开始,这个parser和'POSIX-ly correct'方式一致

如果选项字符串包含W;,parser将作为长格式的替换

acceptsAll方法参数列表中的每个选项都被认为是其他选项的同义词,例如:

OptionParser parser = new OptionParser();

parser.acceptsAll( asList( "w", "interactive", "confirmation" ) );

OptionSet options = parser.parse( "-w" );

 类似资料: