如何使用 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 的评论)。