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

parsing java的时候一直报heap_python

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

parsing java的时候一直报heap_字符串_02

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