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;…

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…

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;但是给他看一些卡片&…

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…

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;的特色库。 。 该…

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

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

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

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

docker 删除所有镜像_关于 Docker 镜像的操作,看完这篇就够啦 !(下)| 文末福利...

紧接着上篇《关于 Docker 镜像的操作&#xff0c;看完这篇就够啦 !(上)》&#xff0c;奉上下篇 &#xff01;&#xff01;&#xff01;镜像作为 Docker 三大核心概念中最重要的一个关键词&#xff0c;它有很多操作&#xff0c;是您想学习容器技术不得不掌握的。本文将带您一步一…

python与access选哪个_从Python连接到Access

I want to be connected to a database Boreas (Access) from Python. How to be connected from Python to Access database Northwind? 解决方案 Here are 2 ways, with COM dispatch and with odbc. You will need the pywin32 extensions and/or pyodbc to use these meth…

设备唯一标识/设备码/设备标识码

文章目录一、MAC地址二、IMEI三、MEIDMEID 和 IMEI 用途的区别四、序列号&#xff08;一&#xff09;苹果手机序列号&#xff08;二&#xff09;华为手机序列号一、MAC地址 MAC地址&#xff08;英语&#xff1a;Media Access Control Address&#xff09;&#xff0c;直译为媒…

java登录界面命令_Java命令行界面(第18部分):JCLAP

java登录界面命令Giles Winstanley的JCLAP &#xff08; Java命令行参数解析器 &#xff09;是基于Java的命令行处理库的系列文章中介绍的第18个库。 这篇文章的示例基于JCLAP 1.4 &#xff0c;它需要Java 8 。 JCLAP主页上指出&#xff1a;“ JCLAP帮助Java开发人员为其应用程…

java登录界面命令_Java命令行界面(第15部分):Jargo

java登录界面命令Jargo在其GitHub主页上定义为“一种减轻程序参数/选项处理的工具”。 当已经存在许多其他命令行处理库时&#xff0c;该页面为另一个命令行处理库提供了基本原理 &#xff0c;该列表的顶部是“因为类型安全性&#xff0c;不变性和可读性很重要”。 Jargo的选项…

没学过编程能学python吗_我没学过编程,能否学会Python?

学习Python编程语言&#xff0c;是大家走入编程世界的最理想选择。那么我没学过编程&#xff0c;能否学会Python?上海Python培训肯定的回答您&#xff1a;of course!完全能学会!设计大师说过&#xff0c;留白是很好的风景&#xff0c;适当的留白是设计的至高境界;对于没有编程…

java登录界面命令_Java命令行界面(第13部分):JArgs

java登录界面命令JArgs 1.0的区别在于&#xff0c;这是我的第13篇文章的主题&#xff0c;该文章是关于Java命令行参数解析的。 JArgs是一个开放源代码&#xff08; BSD许可 &#xff09;库&#xff0c;主要由Steve Purcell和Ewan Mellor等 不同贡献者支持。 事实证明&#xff0…

java登录界面命令_Java命令行界面(第11部分):CmdLn

java登录界面命令这篇文章介绍了如何使用Ostermiller Java Utilities 1.08.02的CmdLn&#xff08;Java命令行解析器&#xff09;来处理基于Java的应用程序中的命令行参数。 Ostermiller Java实用程序包括几种不同类型的实用程序 &#xff0c;但本文的重点是组件页面上描述的“命…