在 Java 中解析命令行输入(命令行参数),常见方式有以下几种,从简单到专业依次介绍:
main 方法的 String[] argspublic class Main {
public static void main(String[] args) {
for (String arg : args) {
System.out.println(arg);
}
}
}
运行:
java Main hello world 123
输出:
hello
world
123
✅ 适合:参数少、格式简单
❌ 缺点:不支持 -name value 这种结构
public static void main(String[] args) {
String name = null;
int age = 0;
for (int i = 0; i < args.length; i++) {
if ("-name".equals(args[i])) {
name = args[++i];
} else if ("-age".equals(args[i])) {
age = Integer.parseInt(args[++i]);
}
}
System.out.println(name + ", " + age);
}
运行:
java Main -name Tom -age 18
✅ 灵活
❌ 容易出错、代码冗长
Apache Commons CLI(推荐)<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.5.0</version>
</dependency>
import org.apache.commons.cli.*;
public class Main {
public static void main(String[] args) throws ParseException {
Options options = new Options();
options.addOption("n", "name", true, "user name");
options.addOption("a", "age", true, "user age");
CommandLineParser parser = new DefaultParser();
CommandLine cmd = parser.parse(options, args);
String name = cmd.getOptionValue("name");
int age = Integer.parseInt(cmd.getOptionValue("age"));
System.out.println(name + ", " + age);
}
}
运行:
java Main -n Tom -a 18
✅ 支持 -n Tom / --name Tom
✅ 自动校验、帮助信息
JCommander(更现代)<dependency>
<groupId>com.beust</groupId>
<artifactId>jcommander</artifactId>
<version>1.82</version>
</dependency>
import com.beust.jcommander.*;
public class Args {
@Parameter(names = "-name", required = true)
public String name;
@Parameter(names = "-age")
public int age = 0;
}
public class Main {
public static void main(String[] args) {
Args a = new Args();
new JCommander(a, args);
System.out.println(a.name + ", " + a.age);
}
}
✅ 注解驱动
✅ 代码最简洁
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入名字:");
String name = sc.nextLine();
System.out.println("你好," + name);
}
}
| 场景 | 推荐方式 |
|---|---|
| 学习 / 简单脚本 | String[] args |
| 工具类程序 | Apache Commons CLI |
| 企业级 CLI 工具 | JCommander |
| 交互式输入 | Scanner |
如果你有具体命令行格式(如 -f file -v --debug),我可以帮你写完整解析代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。