如何使用 Java 中的 name/id/title 读取和接受自定义 CLI 参数?
How do I read and accept custom CLI arguments with name/id/title in Java?
我想在 运行 我的 Java 程序时读取并接受自定义 CLI 参数值,如下所示:
java BookSales --books=/path/to/books.list
--sales=/path/to/sales.list --top_selling_books=3
--top_customers=2 --sales_on_date=2018-02-01
程序必须接受以下参数并能够在命令行上使用这些值,一些是必需的,一些是可选的。
--books=/path/to/books.list (required)
--sales=/path/to/sales.list (required)
--top_selling_books=<count> (optional)
--top_customers=<count> (optional)
--sales_on_date=<date> (optional)
我做的如下图:
String books_path = null;
String sales_path = null;
...
...
for(int i = 0; i<args.length; i++) {
if(args[i].toLowerCase().indexOf("--books=") != -1) {
books_path = args[i].split("=")[1];
}
if(args[i].toLowerCase().indexOf("--sales=") != -1) {
sales_path = args[i].split("=")[1];
}
...
...
}
System.out.println(books_path);
System.out.println(sales_path);
有没有更好的方法只使用标准 java 库和包来做到这一点?
Java 没有任何内置功能可以让您解析超出标准字符串操作的命令行参数。如果您不想使用像 Apache Commons CLI 这样的库,那么您将需要自己编写它。
自己写不是一件容易的事,而且可能会浪费时间。我建议你重新考虑,并为此使用一个库。
您在问题中的代码很好地说明了为什么不应该自己编写它:它非常脆弱,并且在显示的小片段中已经存在许多错误(请参阅 JB Nizet 的评论)。
我想在 运行 我的 Java 程序时读取并接受自定义 CLI 参数值,如下所示:
java BookSales --books=/path/to/books.list
--sales=/path/to/sales.list --top_selling_books=3
--top_customers=2 --sales_on_date=2018-02-01
程序必须接受以下参数并能够在命令行上使用这些值,一些是必需的,一些是可选的。
--books=/path/to/books.list (required)
--sales=/path/to/sales.list (required)
--top_selling_books=<count> (optional)
--top_customers=<count> (optional)
--sales_on_date=<date> (optional)
我做的如下图:
String books_path = null;
String sales_path = null;
...
...
for(int i = 0; i<args.length; i++) {
if(args[i].toLowerCase().indexOf("--books=") != -1) {
books_path = args[i].split("=")[1];
}
if(args[i].toLowerCase().indexOf("--sales=") != -1) {
sales_path = args[i].split("=")[1];
}
...
...
}
System.out.println(books_path);
System.out.println(sales_path);
有没有更好的方法只使用标准 java 库和包来做到这一点?
Java 没有任何内置功能可以让您解析超出标准字符串操作的命令行参数。如果您不想使用像 Apache Commons CLI 这样的库,那么您将需要自己编写它。
自己写不是一件容易的事,而且可能会浪费时间。我建议你重新考虑,并为此使用一个库。
您在问题中的代码很好地说明了为什么不应该自己编写它:它非常脆弱,并且在显示的小片段中已经存在许多错误(请参阅 JB Nizet 的评论)。