如何在Java中读取和接受名为/id/title的自定义CLI参数?
我希望在运行Java程序时读取并接受自定义CLI参数值,如下所示:如何在Java中读取和接受名为/id/title的自定义CLI参数?,java,java-8,command-line-interface,command-line-arguments,Java,Java 8,Command Line Interface,Command Line Arguments,我希望在运行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 String books_path = null; String sales_path = null; ... ... for(int i = 0;
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
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);
程序必须接受以下参数,并且能够使用命令行上的值,有些是必需的,有些是可选的
--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)
--books=/path/to/books.list(必需)
--sales=/path/to/sales.list(必需)
--畅销书=(可选)
--顶级客户=(可选)
--销售日期=(可选)
我所做的如下所示:
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
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);
String books\u path=null;
字符串sales_path=null;
...
...
for(int i=0;iJava没有内置任何东西允许您在标准字符串操作之外解析命令行参数。如果您不想使用Apache Commons CLI之类的库,则需要自己编写
自己写并不是一件小事,它可以成为一个timesink。我建议你重新考虑,只需要使用一个库就可以了
问题中的代码是一个很好的例子,说明了为什么不应该自己编写代码:它非常脆弱,并且已经有很多bug(请参见JB Nizet的评论)在所示的小片段中。Java没有内置任何东西允许您在标准字符串操作之外解析命令行参数。如果您不想使用Apache Commons CLI之类的库,则需要自己编写
自己写并不是一件小事,它可以成为一个timesink。我建议你重新考虑,只需要使用一个库就可以了
问题中的代码是一个很好的例子,说明了为什么不应该自己编写代码:它非常脆弱,并且已经有很多bug(请参见JB Nizet的评论)在显示的小片段中。条件不正确:我可以使用java BookSales hello--books--word=/path/to/books.list
,但它仍然会将其作为--books参数接受。当然,如果我只使用--books而不使用=,代码将抛出运行时异常。因此,您应该更严格地验证参数。但是如果我真的不想使用一个已经为你做了这项工作的库,那么你必须重新设计它,是的。你至少应该在一个方法中考虑到这一点,而不是重复相同的代码。你可以在下面的链接中找到解决方案。希望这有帮助。条件不正确:我可以使用java BookSales hello--books--word=/path/to/books.list
它仍然会将其作为--books参数接受。当然,如果我只使用--books而不使用=,代码将引发运行时异常。因此,您应该更严格地验证参数。但是如果您真的不想使用已经为您完成任务的库,那么您必须重新创建它,是的。您至少应该考虑到这一点在方法中,而不是重复相同的代码。您可以在下面的链接中找到解决方案。希望这对您有所帮助。