java - Java GNU GetOpt:了解 LongOpt 的 StringBuffer 标志
问题描述
我不太明白LongOpt中第三个构造函数的目的。概述描述如下:
如果 LongOpt 对象中表示长选项的标志字段不为空,则将整数值字段存储在那里,并将整数 0 返回给调用者。
从上面的例子中摘录来指导我在下面的观察/问题:
LongOpt[] longopts = new LongOpt[3];
//
StringBuffer sb = new StringBuffer();
longopts[0] = new LongOpt("help", LongOpt.NO_ARGUMENT, null, 'h');
longopts[1] = new LongOpt("outputdir", LongOpt.REQUIRED_ARGUMENT, sb, 'o');
longopts[2] = new LongOpt("maximum", LongOpt.OPTIONAL_ARGUMENT, null, 2);
// ...
// See overview link above for full example
// ..
while ((c = g.getopt()) != -1)
switch (c)
case 0:
arg = g.getOptarg();
System.out.println("Got long option with value '" +
(char)(new Integer(sb.toString())).intValue()
+ "' with argument " +
((arg != null) ? arg : "null"));
break;
// ... Rest of example
因此,在遍历选项时,您将返回 0。当然,这并不能告诉您我们点击了哪个选项,因此我们将上述长选项的“短格式”o
放入--outputdir
StringBuilder 对象中sb
。从该 StringBuilder 选项中提取字符可以让您查看它是哪个长选项,并知道如何处理该选项的参数。
一些问题:
- 我上面的理解正确吗?
- 为什么使用 StringBuilder 存储字符?为什么不只是有一个常规字符串并放入完整的长选项名称,即
outputdir
在其中? - 为什么不让长选项字符串上的 switch 语句匹配?即
outputdir
。这是因为当您无法打开字符串时,该库是在 JDK 7 之前编写的?然后可以像空头期权一样匹配多头期权。
解决方案
经过一些研究,我可以为自己的问题提供一些清晰的信息
我上面的理解正确吗?
我认为这是基于实验。但是对于将来阅读此内容的任何人都可以进行更正。
为什么使用 StringBuilder 存储字符?为什么不只是有一个常规字符串并在其中放置完整的长选项名称,即 outputdir 呢?
为什么不让长选项字符串上的 switch 语句匹配?即输出目录。这是因为当您无法打开字符串时,该库是在 JDK 7 之前编写的?然后可以像空头期权一样匹配多头期权。
是的,我能找到的唯一 repo 的最后一次提交是8 年前。因此需要将匹配的选项提取到单个char
以在 switch 语句中使用。
相反,我转而使用具有更简单 API 的Apache Commons CLI
推荐阅读
- amazon-s3 - 从 athena 查询 s3 中的文件
- opencv - opencv,从描述符 cv::Mat 中获取单个描述符?
- mysql - 外键上的 SQL 索引
- ios - Firebase 分析在 DebugView 中显示不正确的数据
- c# - 在datagridview选择索引更改后设置焦点控制
- c# - 100次运行后mysql定时过期?
- php - Cakephp 查询序列得到意外结果
- vb.net - 具有多个扩展名过滤器并按文件名排序的 Getfile
- vba - excel listObject问题
- php - 在本地服务器上工作正常,但是一旦我在 Live 服务器上部署,它就会显示错误的 IP