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

java parse

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 )时显示的消息。

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

在选择框架或库来帮助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

java parse

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

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

相关文章

mysql 聚簇索引和非聚簇索引_MySQL学习之——索引

转自&#xff1a;CSDNMySQL是目前绝大多数互联网公司使用的关系型数据库&#xff0c;它性能出色、资源丰富、成本低廉&#xff0c;是快速搭建互联网应用的首选关系型数据库。但是&#xff0c;俗话说&#xff0c;“好马配好鞍”&#xff0c;仅仅会使用MySQL是不够的&#xff0c;…

QPW 邀请日志表(tf_invite_log)

邀请日志表 被邀请者注册成功后&#xff0c;往这张表插入一条记录&#xff0c;记录在何时谁邀请了谁。 CREATE TABLE tf_invite_log (invite_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 邀请ID,user_id bigint(20) DEFAULT NULL COMMENT 用户ID, # 邀请用户IDinvited_us…

java登录界面命令_Java命令行界面(第10部分):picocli

java登录界面命令picocli主页面将picocli描述为“强大的微小命令行界面”&#xff0c;“ picocli”是一个单文件Java框架&#xff0c;用于解析命令行参数并生成精美&#xff0c;易于定制的用法帮助消息。 有颜色。” 这篇文章简要概述了如何使用Picocli 0.9.7处理Java代码中的命…

navicat运行sql文件慢_SQL进阶之路——入门

一、初步了解SQL数据库&#xff1a;用来存放数据关系数据库&#xff1a;1.含有多张表 2.各表之间有关系关系数据库中表的样式&#xff1a;a.每个表1个表名 b.每个表中包含记录列名的列和记录数据的行 c.利用主键用来标识数据的唯一性关系数据库中每个表之间如何建立联系&#x…

查询英文缩写形式(缩写词)的网站工具梳理

国外 https://www.abbreviations.com/ 点评&#xff1a;比较靠谱&#xff0c;大部分单词查询到的缩写形式是正确的 https://www.acronymfinder.com/ 点评&#xff1a;不是很靠谱&#xff0c;很多单词查询到的缩写形式是错误的 国内 http://shortof.com/ 点评&#xff1a…

java登录界面命令_Java命令行界面(第19部分):jClap

java登录界面命令本系列中第19个帖子的重点是从Java代码解析命令行参数是jClap &#xff08; Java命令行参数解析器 &#xff09;&#xff0c;不应与JCLAP库混淆&#xff0c;该库是我本系列前 一篇文章的重点。 上 一篇 文章介绍了Giles Winstanley&#xff08; snaq.net &…

weka分类器怎么设置样本类别_【程序喵笔记】小样本学习1.0

小样本学习前几天接触小样本学习 Few-Shot Learning&#xff0c;感觉很是有意思。看到Shusen Wang老师的讲解&#xff0c;感觉很棒~持续学习~学会学习 Lean to learn小朋友去动物园&#xff0c;见到未知的动物&#xff0c;他虽然不知道类别&#xff0c;但是给他看一些卡片&…

关于编号/编码命名的问题

文章目录概述订单号命名概述 银行卡账号、员工编号、分店编号、单据编号、单据流水号、部门编号&#xff0c;基本都是用 Number 命名&#xff0c;缩写 NO。 分析&#xff1a;在实际的业务中&#xff0c;很多以 Number 命名的编号里面通常只有阿拉伯数字&#xff0c;没有其它字…

c# java 哪个好 流媒体_C#Net7mma H264 / PCMU流媒体

我在创建一个包含音频和视频音频和视频的流时遇到问题 . 我正在为rtsp服务器使用net7mma库 . 我正在播放视频给wowza . 我得到了H264 / AVC视频流和PCMU 44,1k采样率视频流 . 这就是我这样做的方式&#xff1a;首先我创建媒体&#xff1a;RFC6184Media newMedia new RFC6184Me…

maven 生成本地库_在2017年从Maven工件生成P2存储库

maven 生成本地库几年前&#xff0c;我写了一篇博客文章&#xff0c;介绍如何基于Maven工件生成P2存储库。 如今&#xff0c;这种描述的方法已经过时了&#xff0c;我想展示一种基于p2-maven-plugin的新方法&#xff0c;该方法是为解决此问题而创建的。 Maven构建生命周期中的…

java 状态模式 同步_JAVA设计模式之状态模式

在阎宏博士的《JAVA与模式》一书中开头是这样描述状态(State)模式的&#xff1a;状态模式&#xff0c;又称状态对象模式(Pattern of Objects for States)&#xff0c;状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改…

python列表修改_python修改列表

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01; 由于惯性思维&#xff0c;导致使用for循环修改列表中的值出现问题首次尝试&#xff1a;def make_great(orig…

QPW 企业员工表(tf_company_employee)

文章目录员工表字段说明员工表 CREATE TABLE tf_company_employee (employee_id bigint(20) NOT NULL COMMENT 职员Id,employee_no varchar(15) NOT NULL COMMENT 职员编号, # &#xff08;补&#xff09;管理员自定义&#xff0c;可以为空&#xff0c;但是非空时不许重复&…

python装饰器作用和功能_Python装饰器原理与用法分析

这篇文章主要介绍了Python装饰器原理与用法,结合实例形式分析了Python装饰器的概念、原理、使用方法及相关操作注意事项,需要的朋友可以参考下 本文实例讲述了Python装饰器原理与用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a; 1、装饰器的本质是函数&#xff0c…

java登录界面命令_Java命令行界面(第16部分):JArgp

java登录界面命令这篇文章中介绍的基于Java的命令行参数处理库是IBM developerWorks文章Java编程动态性&#xff0c;第3部分&#xff0c;应用的反射 &#xff08;第2003 部分&#xff0c;此归档文章于2016年“归档”&#xff0c;但仍可通过PDF下载 &#xff09;的特色库。 。 该…

QPW 用户签到日志表(tf_user_signin_log)

用户签到日志表 CREATE TABLE tf_user_signin_log (signin_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 签到ID,user_id bigint(20) DEFAULT NULL COMMENT 用户ID,insert_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间,update_time timestamp NOT …

tnsnames.ora配置未生效_1分钟了解网络交换机的6种命令配置模式

我们在配置交换机的时候首先要了解的就是交换机命令模式&#xff0c;小编用Cisco思科交换机为例带大家了解交换机的6种配置模式。Cisco IOS提供了用户EXEC模式和特权EXEC模式两种基本的命令执行级别&#xff0c;同时还提供了全局配置、接口配置、Line配置和vlan数据库配置等多种…

dockerfile mysql例子_docker-compose 实用示例

简单来说, docker compose就是一键启动/关闭多个容器的工具, 它能够帮你解决容器之间依赖的问题, 哪个先启动, 依赖哪个容器等.当开发的系统越来越复杂, 开发环境和部署都没那么简单的时候, 可以试试docker compose.下面会把我实际经验中的一个例子简化出来&#xff0c;一步步教…

QPW 操作日志表(tl_operate_log)

操作日志表 前端每次调后端服务时&#xff0c;会往这张表插入一条记录&#xff0c;作为接口调用日志&#xff0c;出现 bug 时可以查询这张表追溯问题。 CREATE TABLE tl_operate_log (operate_log_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 操作ID,user_id bigint(20) …

java 线程中创建线程_如何在Java 8中创建线程安全的ConcurrentHashSet?

java 线程中创建线程在JDK 8之前&#xff0c;还没有办法在Java中创建大型的线程安全的ConcurrentHashSet。 java.util.concurrent包甚至没有一个名为ConcurrentHashSet的类&#xff0c;但是从JDK 8开始&#xff0c;您可以使用新添加的keySet&#xff08;默认值&#xff09;和ne…