2014-10-08 49 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