java kotlin 命令行解析

在 Java 中解析命令行字符串可以使用以下几种方法:

1. 使用 args 参数

当程序启动时,主方法(main 方法)会接收一个 String 数组作为参数,即 args。这些参数就是从命令行传递过来的。

示例代码:

object CommandLineParser {@JvmStaticfun main(args: Array<String>) {for (arg in args) {println(arg)}}
}

运行程序并传递命令行参数:

java CommandLineParser arg1 arg2 arg3

输出:

arg1
arg2
arg3

2. 使用 Apache Commons CLI

Apache Commons CLI 是一个专门用于解析命令行参数的库,功能强大且易于使用。

首先,添加依赖(以 Maven 为例):

<dependency><groupId>commons-cli</groupId><artifactId>commons-cli</artifactId><version>1.8.0</version>
</dependency>

示例代码:


import org.apache.commons.cli.*object CommandLineParser {@JvmStaticfun main(args: Array<String>) {// 定义命令行选项val options = Options()options.addOption("h", "help", false, "show help")options.addOption("v", "version", false, "show version")options.addOption("f", "file", true, "file to process")val parser = DefaultParser()var cmd: CommandLine? = nulltry {cmd = parser.parse(options, args)if (cmd!!.hasOption("h")) {val formatter = HelpFormatter()formatter.printHelp("CommandLineParser", options)System.exit(0)}if (cmd.hasOption("v")) {println("Version 1.0")System.exit(0)}if (cmd.hasOption("f")) {val fileName = cmd.getOptionValue("f")println("Processing file: $fileName")}} catch (e: ParseException) {println("Failed to parse command line properties")e.printStackTrace()}}
}

3. 使用 JCommander

JCommander 是一个用于解析命令行参数的库,使用方便且功能强大。下面是一个详细的示例演示如何在 Java 中使用 JCommander 解析命令行参数。

添加依赖

首先,使用 Maven 添加 JCommander 库的依赖:

<dependency><groupId>com.beust</groupId><artifactId>jcommander</artifactId><version>1.82</version>
</dependency>
示例代码

下面是一个完整的示例代码,演示如何使用 JCommander 解析命令行参数:


import com.beust.jcommander.JCommander
import com.beust.jcommander.Parameter
import com.beust.jcommander.ParameterExceptionclass CommandLineParser {@Parameter(names = ["--help", "-h"], help = true, description = "display help info")private var help = false@Parameter(names = ["--version", "-v"], description = "display version info")private var version = false@Parameter(names = ["--file", "-f"], description = "files that need to be processed")private var file: String? = nullcompanion object {@JvmStaticfun main(args: Array<String>) {val main = CommandLineParser()val jc = JCommander.newBuilder().addObject(main).build()try {jc.parse(*args)if (main.help) {jc.usage()return}if (main.version) {println("Version 1.0")return}if (main.file != null) {println("Processing file: " + main.file)} else {println("No file provided. Use -f or --file to specify a file.")}} catch (e: ParameterException) {e.printStackTrace()jc.usage()}}}
}
运行程序并传递命令行参数

编译并运行程序,可以通过不同的命令行参数测试程序:

  1. 显示帮助信息:

    java CommandLineParser -h
    

    输出:

    Usage: <main class> [options]Options:-h, --help      display help info-v, --version   display version info-f, --file      files that need to be processed
    
  2. 显示版本信息:

    java CommandLineParser -v
    

    输出:

    Version 1.0
    
  3. 处理文件:

    java CommandLineParser -f myfile.txt
    

    输出:

    Processing file: myfile.txt
    
  4. 未提供文件时的提示信息:

    java CommandLineParser
    

    输出:

    No file provided. Use -f or --file to specify a file.
    

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

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

相关文章

Ansible——template模块

目录 基本参数 选项参数 高级参数 基本用法 示例&#xff1a; 示例一&#xff1a;Nginx 配置 1. 目录结构 2. 模板文件&#xff1a;nginx.conf.j2 3. Playbook 文件&#xff1a;deploy_nginx.yml 4. 执行 Playbook 示例二&#xff1a;MySQL 配置 1. 目录结构 2. …

LLM大语言模型(GPT)的分布式预训练与微调及部署

LLM大语言模型(GPT)的分布式预训练与微调及部署 实现方案&#xff1a;设计并实现了一个大规模语言模型&#xff08;GPT&#xff09;的分布式预训练&#xff0c;结合RAG(文档、MySQL)、Agent、LLM连网等技术在基座上微调&#xff0c;以提高模型在特定领域任务上的性能和效率。 …

函数(下) C语言

函数下 嵌套调用和链式访问1. 嵌套调用2. 链式访问 函数的声明和定义1. 单个文件2. 多个文件3. static 和 extern3.1 static 嵌套调用和链式访问 1. 嵌套调用 嵌套调用就是函数之间的互相调用&#xff0c;每个函数就像⼀个乐高零件&#xff0c;正是因为多个乐高的零件互相无缝…

Nginx缓存之代理缓存配置

Nginx 的缓存功能是集成在代理模块中的&#xff0c;当启用缓存功能时&#xff0c;Nginx 将请求返回的响应数据持久化在服务器磁盘中&#xff0c;响应数据缓存的相关元数据、有效期及缓存内容等信息将被存储在定义的共享内存中。当收到客户端请求时&#xff0c;Nginx 会在共享内…

十四、 组合数学

人们在生活中经常会遇到排列组合问题。比如说&#xff1a;在 5 5 5个礼物中选 2 2 2个&#xff0c;问有多少种选取方法&#xff1f; 组合数学就是研究一个集合内满足一定规则的排列问题。这类问题如下&#xff1a; 存在问题&#xff1a;即判断这些排列是否存在计数问题&#x…

Java中的封装、继承和多态的概念是什么?

封装 封装是面向对象编程的一个核心概念&#xff0c;它涉及到隐藏对象的属性和实现细节&#xff0c;只对外公开接口&#xff0c;控制在程序中属性的读和修改的访问级别。封装的目的是增强安全性和简化编程&#xff0c;使用者不必了解具体的实现细节&#xff0c;而只是要通过外…

当同时绑定mousedown和mouseup时,不执行mouseup

问题描述&#xff1a; 当我同时给一个标签添加mousedown和mouseup两个鼠标事件&#xff0c;点击span的时候会触发mousedown事件&#xff0c;但是不会执行mouseup事件&#xff1b;但是注释图二中的setCloudControl方法又能触发mouseup。 后来查阅资料&#xff0c;发现是在封装a…

[算法刷题积累] 两数之和以及进阶引用

两数之和很经典&#xff0c;通常对于首先想到的就是暴力的求解&#xff0c;当然这没有问题&#xff0c;但是我们如果想要追求更优秀算法&#xff0c;就需要去实现更加简便的复杂度。 这里就要提到我们的哈希表法: 我们可以使用unordered_map去实现&#xff0c;也可以根据题目&a…

【Gradio】Chatbots 如何用 Gradio 创建聊天机器人

Creating A Chatbot Fast 简介 聊天机器人是大型语言模型的一个流行应用。使用 gradio &#xff0c;您可以轻松构建您的聊天机器人模型的演示&#xff0c;并与您的用户分享&#xff0c;或者使用直观的聊天机器人用户界面自己尝试。 本教程使用 gr.ChatInterface() &#xff0c;…

Lua优化技巧

常见的Lua优化小技巧 Lua常见优化点&#xff1a;1. 尽量使用局部变量2. table的相关减少对表的访问for循环预分配表空间元表 3. string的相关4. 避免运行时加载编译5. 尽量避免频繁创建临时对象闭包表 Lua常见优化点&#xff1a; 1. 尽量使用局部变量 尽量将变量局部化&#x…

SiGILP是什么?

SiGILP是什么&#xff1f; SiGILP&#xff08;Simultaneous Generative and Interpretive Language Processing&#xff0c;中文&#xff1a;同时生成和解释语言处理&#xff09;是一种先进的多模态模型。简单来说&#xff0c;SiGILP可以同时理解和生成多模态数据&#xff0c;…

SpringMVC系列四: Rest-优雅的url请求风格

Rest请求 &#x1f49e;Rest基本介绍&#x1f49e;Rest风格的url-完成增删改查需求说明代码实现HiddenHttpMethodFilter机制注意事项和细节 &#x1f49e;课后作业 上一讲, 我们学习的是SpringMVC系列三: Postman(接口测试工具) 现在打开springmvc项目 &#x1f49e;Rest基本介…

基于Spark3.3.4版本,实现Standalone 模式高可用集群部署

目录 一、环境描述 二、部署Spark 节点 2.1 下载资源包 2.2 解压 2.3 配置 2.3.1 配置环境变量 2.3.2 修改workers配置文件 2.3.3 修改spark.env.sh文件 2.3.4 修改spark-defaults.conf 2.4 分发 2.5 启动服务 2.5.1 启动zookeeper 2.5.2 启动hdfs 2.5.3 启动spar…

归并排序 (递归实+非递归)

前言 归并排序是一种逻辑很简单&#xff0c;但是实现有点难度的排序&#xff0c;尤其是非递归&#xff0c;对于区间的把握更是需要一点逻辑的推导&#xff0c;但是没有关系&#xff0c;轻松拿捏 归并排序gif 归并排序单趟实现 1&#xff0c;创建tmp数组&#xff0c; 2&#xff…

javaWeb项目-在线考试系统详细功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、Java简介 Java语…

「Qt Widget中文示例指南」如何实现一个滑动条(一)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 滑动条示例展示了如…

轻轻松松上手的LangChain学习说明书

本文为笔者学习LangChain时对官方文档以及一系列资料进行一些总结&#xff5e;覆盖对Langchain的核心六大模块的理解与核心使用方法&#xff0c;全文篇幅较长&#xff0c;共计50000字&#xff0c;可先码住辅助用于学习Langchain。 一、Langchain是什么&#xff1f; 如今各类AI…

昇思25天学习打卡营第1天|快速入门

学AI还能赢奖品&#xff1f;每天30分钟&#xff0c;25天打通AI任督二脉 (qq.com) 本节通过MindSpore的API来快速实现一个简单的深度学习模型。若想要深入了解MindSpore的使用方法&#xff0c;请参阅各节最后提供的参考链接。 import mindspore from mindspore import nn from …

项目训练营第一天

项目训练营第一天 springboot后端环境搭建 1、首先需要找文章下载好tomcat、JDK、maven、mysql、IDEA。&#xff08;软件下载及环境变量配置略&#xff09; 2、在下载好的IDEA中&#xff0c;选择新建spring initial项目&#xff0c;选定java web&#xff0c;即可新建一个spri…

从Manifest V2到V3:Chrome扩展后台脚本不完全指南,background.js的运行机制

背景 最近我在接触Chrome插件开发&#xff0c;发现后台脚本&#xff08;background script&#xff09;非常有趣。在开发过程中&#xff0c;我思考了关于这个脚本的三个问题&#xff0c;希望大家也能分享一下见解&#xff1a; background.js 在什么时候运行&#xff1f;backg…