Java命令行界面(第9部分):parse-cmd

parse-cmd库由单个类ParseCmd.java组成,该类是“用于在Java应用程序中定义和解析命令行参数的Java类。” 该库托管在Google Code存档上 ,因此可以随时关闭 。 该JAR似乎也可以在GitHub上使用 。 这篇文章介绍了如何使用parse-cmd 0.0.93处理Java中的命令行参数。

parse-cmd Requirement Wiki列出了几种用于处理Java命令行参数的替代方法,包括本系列前面已介绍的替代方法。 在列出这些选择之后,它指出:“查看这些和其他条目,是时候尝试另一个解析器了。” 然后,文档继续描述parse-cmd试图满足的要求。

下一个(不完整的)代码清单演示了使用parse-cmd解析命令行参数的“定义”阶段。 [请注意,本文中的示例与本系列的前八篇文章中的示例相似。]

parse-cmd的“定义”阶段

/** String displayed where there is a problem processing arguments. */
private final static String USAGE ="java examples.dustin.commandline.parsecmd.Main --file <filePathAndName> [--verbose 1]";public static void main(final String[] arguments)
{final ParseCmd parseCmd= new ParseCmd.Builder().parm("--file", "").req().parm("--verbose", "0").help(USAGE).build();

代码清单演示了使用ParseCmd.Builder()和该类实例上可用的流利方法的预期命令行参数的定义。 每个方法依次返回同一Builder类的实例,以便可以将这些方法调用链接在一起,如上所示。 如上所示,用法/帮助字符串是手动构建的,并通过help(String)方法提供给Builder ,而不是由parse-cmd自动构建。

ParseCmd.Builder类的parm方法已重载,但是在此代码清单中,我使用了parm(String, String)方法parm(String, String)该方法接受参数名称和该参数的“默认”值。 如果我仅向该方法提供一个字符串,仅接受一个字符串,则该参数的默认值假定为“ 1”。 对于文件路径和名称参数,这可能导致parse-cmd假定参数类型错误。 通过显式提供默认的空字符串,parse-cmd可以将文件路径和名称的参数准确地视为可变长度字符串。

上面的代码中也定义了--verbose参数,并且还提供了默认值,因为如果没有提供参数,则隐式默认值“ 1”将使冗长性“ on”,并且不是默认值。使用Java进行命令行分析的系列文章中的任何早期文章。

Builder一个链式返回实例上调用req()表示需要先前定义的参数( --file )。 另一个参数( --verbose )没有指定此参数,因此隐式默认为可选。

据我所知,使用parse-cmd为定义的命令行参数指定别名或同义词并不容易。 换句话说,我没有办法告诉parse-cmd --file-f是相同的命令行参数。 因此,在此示例中,我仅对参数--file--verbose使用带双连字符的“ long”版本。

在本系列中介绍了以前的基于Java的命令行解析库之后,“解析”阶段紧随“定义”阶段之后。 尽管可以使用parse-cmd进行相同的转换,但广告且首选的方法是在“定义”阶段之后和“解析”阶段之前实施“验证”阶段。 此阶段使您可以查看在验证可用命令行参数期间是否发现任何错误,并在下一个(不完整的)代码清单中进行演示。

parse-cmd的“验证”阶段

final String errorString = parseCmd.validate(arguments);
if (!errorString.isEmpty())
{out.println("ERROR: " + errorString);
}

刚刚显示的代码清单演示了ParseCmd.validate(String[])方法的使用,该方法用于验证命令行参数是否与“定义”阶段中定义的预期参数匹配。 如果有任何意外结果,则返回非空字符串。 空的String被认为是一件好事,它表示“有效”命令行参数。

使用有效的参数,下一步可以“解析”这些命令行参数,如下面的单行代码清单所示。

使用parse-cmd进行“解析”阶段

final Map<String, String> parsedArguments = parseCmd.parse(arguments);

调用ParseCmd.parse(String[])是参数名称到参数值的Java Map<String, String>

通过简单地访问解析阶段返回的Map<String, String>即可实现parse-cmd的“询问”阶段。 可以通过参数名称查询地图的键,并且返回的值是与该参数名称关联的值。 请注意,这意味着所有参数,甚至是像--verbose类的“布尔”参数,都具有与之关联的值,而不是唯一需要的标志是否存在。 换句话说,-- --verbose在命令行上表示时必须后面跟一个值。 在下面的代码清单中演示了在这种情况下对两个预期参数的询问。

parse-cmd的“审讯”阶段

final Map<String, String> parsedArguments = parseCmd.parse(arguments);
final String filePathAndName = parsedArguments.get("--file");out.println("The path/name of the file is '" + filePathAndName+ "' and verbosity is set to '" + parsedArguments.get("--verbose") + "'.");

GitHub上提供了示例的完整代码清单,该示例的片段已在本文中显示。

下一个屏幕快照演示了未提供必需的命令行参数( --file )时显示的消息。

下面的屏幕快照演示了--file--verbose命令行参数的基于parse-cmd的命令行处理的成功应用。

在选择框架或库来帮助Java进行命令行解析时,需要考虑parse-cmd的一些其他特征。

  • parse-cmd是带有Apache License 2.0的开源。
  • parse-cmd托管在Google代码档案库中 ,该档案库可随时被“拒绝”(当前状态为“将于2016年初被拒绝”)。
  • parsecmd-0.0.93.jar JAR文件的大小约为50 KB。
  • parse-cmd采用流畅的Builder实现,而不使用注释。

parse-cmd是(当前)另一个Java库,可供需要处理命令行参数的Java开发人员使用。 它使用一些假设和含义来做出一些决策。 parse-cmd的作者写道,尽管“已有几种基于Java的命令行解析解决方案可用”,但parse-cmd仍是编写的,因为“它们通常都很难学习和使用。”

其他参考

  • 解析cmd
  • parse-cmd来源
  • parse-cmd下载
  • parse-cmd – Requirement.wiki
  • parse-cmd – sampleSource.wiki

翻译自: https://www.javacodegeeks.com/2017/07/java-command-line-interfaces-part-9-parse-cmd.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350226.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pytorch--Tensor, Numpy--Array,Python--List 相互之间的转换

1、 Python--List Numpy--Array list = [[1, 2, 4, 8], [0.1, 0.4, 0.9, 0.8]] list_np = np.array(list) print(list_np的维度:,list_np.shape) print(list_np的类型:,type(list_np))运行结果: 2、Python--List Pytorch--Tensor test = [[1, 2, 4, 8], [0.1, 0.4, 0…

Redis的各项功能解决了哪些问题?

Redis是什么 官方简介解释到&#xff1a;Redis是一个基于BSD开源的项目&#xff0c;是一个把结构化的数据放在内存中的一个存储系统&#xff0c;你可以把它作为数据库&#xff0c;缓存和消息中间件来使用。 同时支持strings&#xff0c;lists&#xff0c;hashes&#xff0c;set…

join left semi_HIVE--left semi join

实验&#xff1a;hive> select * from b1;OK1 003 201705111 004 201705121 005 201705132 006 201705143 007 20170515Time taken: 0.041 secondshive> select * from b2;OK1 005 201705132 006 …

java permgen_Java 8:从PermGen到元空间

java permgen您可能已经知道&#xff0c;现在可以下载JDK 8 Early Access 。 这使Java开发人员可以尝试Java 8的某些新语言和运行时功能。这些功能之一是完全删除自Oracle自JDK 7发行以来就宣布的Permanent Generation&#xff08;PermGen&#xff09;空间。例如&#xff0c;自…

总结

写在前面 课程名称&#xff1a;软件工程原理及方法 课程链接&#xff1a;https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 作业要求&#xff1a;https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/3393 团队名称&#xff1a;求莫名堂 请…

Pytorch GRU(详解GRU+torch.nn.GRU()实现)

pytorch GRU 目录 pytorch GRU 一、GRU简介1 二、GRU简介2 三、pytorch GRU 3.1 定义GRU ()

同步装饰器来替换线程安全类

您知道什么是线程安全吗&#xff1f; 如果没有&#xff0c;下面是一个简单的示例。 所有类都必须是线程安全的&#xff0c;对吗&#xff1f; 并不是的。 其中一些必须是线程安全的&#xff1f; 又错了。 我认为它们都不必是线程安全的&#xff0c;而它们都必须提供同步的装饰器…

creo减速器建模实例_3.16减速器箱体附件建模

本节内容主要介绍了减速器箱体附件建模&#xff0c;视频时长24分32秒。本节主要通过阵列&#xff0c;拉伸&#xff0c;孔等命令完成创建&#xff0c;操作时注意孔的类型的选择&#xff0c;以及定位基准的选择&#xff0c;学习时要掌握其减速器附件的设计。简要操作步骤&#xf…

回文数

问题 A: 回文数 时间限制: 1 Sec 内存限制: 32 MB提交: 1705 解决: 512[提交][状态][讨论版]题目描述 我们把从左往右和从右往左念起来相同的数字叫做回文数。例如&#xff0c;75457就是一个回文数。当然某个数用某个进制表示不是回文数&#xff0c;但是用别的进制表示可能就…

Pytorch RNN(详解RNN+torch.nn.RNN()实现)

目录 一、RNN简介 二、RNN简介2 三、pytorch RNN 3.1 定义RNN()

git ssh创建分支_【ssh简单版git-server 1】自建git-server

环境&#xff1a;centos和ubuntu系统都可以CentOS release 6.7git version 1.7.1git-server 192.168.50.108git-client 192.168.50.112备注&#xff1a;基于linux系统下做ssh模式的gitserver&#xff0c;需要ssh免密钥&#xff0c;因为git用户是禁止登录的&#xff0c;clone时没…

使用js将后台返回的数据转换成树形结构

将类似如下数据转换成树形的数据&#xff1a; [{ id: 1, name: 1, },{ id: 2, name: 1-1, parentId: 1 },{ id: 3, name: 1-1-1, parentId: 2 },{ id: 4, name: 1-2, parentId: 1 },{ id: 5, name: 1-2-2, parentId: 4 },{ id: 6, name: 1-1-1-1, parentId: 3 },{ id: 7, name:…

HMM及维特比算法

参考 HMM&#xff1a;https://blog.csdn.net/sinat_25346307/article/details/79119366 Viterbi算法&#xff1a;https://blog.csdn.net/shenxiaoming77/article/details/79228378 一、HMM定义 以词性标注为例说明 图1 词性标注任务1、问题&#xff1a;如图1所示&#xff0c…

java 大文件 处理_用Java处理大文件

java 大文件 处理我最近不得不处理一组包含历史逐笔交易的外汇市场数据的文件&#xff0c;并很快意识到使用传统的InputStream都无法将它们读取到内存中&#xff0c;因为每个文件的大小都超过4 GB。 Emacs甚至无法打开它们。 在这种特殊情况下&#xff0c;我可以编写一个简单的…

python项目结构目录结构采用的是_python 项目目录结构设置

python 项目目录结构设置为项目设置目录结构是为了将功能类似的文件放置在同一目录内&#xff0c;增强项目的可读性和可维护性。如果一个python项目功能单一&#xff0c;代码量很小&#xff0c;那就没必要设置的这么复杂。下图是一个示例项目的目录结构&#xff1a;1&#xff0…

HMM和CRF 条件随机场详解

转载于 https://blog.csdn.net/qq_42901761/article/details/104206799 这位大神ffffatgoose总结的很好

使用Spring Cloud Config作为外部化配置

关于连续交付 &#xff0c;最重要的实践之一是只构建一次二进制文件&#xff0c;并在不同的环境&#xff08;开发&#xff0c;测试&#xff0c;验收等&#xff09;中使用该二进制文件 。 这意味着最有可能需要外部化应用程序的配置 。 对于Spring Boot应用程序&#xff0c;将其…

51nod1040 最大公约数之和,欧拉函数或积性函数

1040 最大公约数之和 给出一个n&#xff0c;求1-n这n个数&#xff0c;同n的最大公约数的和。比如&#xff1a;n 6时&#xff0c;1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6&#xff0c;加在一起 15 看起来很简单对吧&#xff0c;但是n<1e9&#xff0c;所以暴力是不行的…

hide show vue 动画_Vue2.x学习四:过渡动画

Vue 在插入、更新或者移除 DOM 时&#xff0c;提供多种不同方式的应用过渡效果。请注意它的应用场景并不是说我们写了一个动画之后让它一直在动&#xff0c;而是在一个模块显示或隐藏的时候去做一种特效&#xff0c;使得它的过程有过渡性&#xff0c;而不是很突兀的直接消失或显…

Pytorch cifar10离线加载二进制文件

说明直接离线加载cifar10到Pytorch 直接加载6个文件到pytorchdata_batch_1data_batch_2data_batch_3data_batch_4data_batch_5test_batchimport os import cv2 import pickle import numpy as np import matplotlib.pyplot as pltimport torchvision from torch.autograd impor…