2014-10-08 52 views
1

我有以下参数添加到CLI
-sbx
-CSWConfig
-stripInfo
-modelSources
-catchArchive
-swSupplierName
-modelsSWExchnage如何保留帮助部分中的参数排序?

但同时显示帮助它显示这些排序顺序(如下图所示),我不想要的选项,我希望所有的选项,因为他们被添加。
-CatchArchive
-CSWConfig
-modelSources
-sbx
-stripInfo
-swSupplierName

我读这一个link但我无法保留的排序,而显示帮助内容。

private void print_help() { 
    String CONST_STR_CLI_INFO = "ercli.exe custzip"; 
    HelpFormatter formatter = new HelpFormatter(); 
    formatter.setOptionComparator(new Comparator() { 

     @Override 
     public int compare(Object o1, Object o2) { 
      Option op1=(Option) o1; 
      Option op2=(Option) o2; 
      return //what to do here? 
     } 
    }); 
    formatter.printHelp(CONST_STR_CLI_INFO, null, options, "", true); 
} 
+0

在[链接](http://stackoverflow.com/questions/11741625/apache-commons-cli-ordering-help-options/12449193#12449193)第4个答案给了回报opt1.getKey()。与compareToIgnoreCase (opt2.getKey());你会得到的。 – 2014-10-08 12:39:04

回答

0

由于Options()类将选项存储在Maps内部,因此它不保留任何顺序。这意味着你需要提供你自己的订单,因为你已经发现了。

为了获得订单,就可以把钥匙放在了前期列表,以便在需要的顺序为每个元素的索引:

final List<String> optionKeys = new ArrayList<>(); 

optionKeys.add("sbx"); 
optionKeys.add("CSWConfig"); 
optionKeys.add("stripInfo"); 
optionKeys.add("modelSources"); 
optionKeys.add("catchArchive"); 
optionKeys.add("swSupplierName"); 
optionKeys.add("modelsSWExchnage"); 

然后在比较你可以通过索引在这个列表进行比较:

@Override 
    public int compare(Object o1, Object o2) { 
     Option op1=(Option) o1; 
     Option op2=(Option) o2; 
     return Integer.compare(optionKeys.indexOf(op1.getLongOpt()), optionKeys.indexOf(op1.getLongOpt())); 
    } 
+0

感谢您的帮助,但我们将如何获得这个声明中的关键optionKeys.indexOf(o1.key),我得到错误的“o1.key” – user3462473 2014-10-09 07:45:48

+0

对不起,这是一个错误的样本,现在纠正... – centic 2014-10-10 06:29:02

+0

@centic我也有类似的问题[这里](http://stackoverflow.com/questions/27614571/how-to-use-apache-commons-cli-to-parse-the-property-file-and-help-option ),它使用Apache Commons CLI。如果可能的话,你能帮助我吗? – john 2014-12-23 05:53:18