2015-04-30 14 views
2

我正在處理一個奇怪的args4j錯誤。我處理列表命令行參數Args4j列表參數包含未處理的空間

aaa.jar -list special_date=2015-05-05 "special_name=bob the builder" 

這與StringArrayOptionHandler

處理。當我retreive列表的論據是什麼我得到的是

[special_date=2015-05-05, special_name=bob, the, builder] 

Java文檔說,這應該工作

java -jar aaa.jar -s banan hruska jablko 
java -jar aaa.jar -s banan "hruska jablko" 
java -jar aaa.jar -s "banan hruska jablko" 
java -jar aaa.jar -s banan hruska jablko -l 4 -r 
java -jar aaa.jar -t 222 -s banan hruska jablko -r 

有處理與報價單參數時,沒有錯誤。

aaa.jar -a "bob the builder" 

工作完全正常

謝謝

+0

你在誤讀javadoc;它說「*這些例子中的所有結果都包含一個包含三個令牌的單個字符串數組:'banan','hruska'和'jablko'。*」 – dimo414

回答

3

implementation of StringArrayOptionHandler是相當簡單的,你可以調整它自己的目的很輕鬆了。像這樣的東西應該工作:

public class WellBehavedStringArrayOptionHandler extends OptionHandler<String> { 
    public WellBehavedStringArrayOptionHandler(
     CmdLineParser parser, OptionDef option, Setter<String> setter) { 
    super(parser, option, setter); 
    } 

    @Override 
    public String getDefaultMetaVariable() { 
    return Messages.DEFAULT_META_STRING_ARRAY_OPTION_HANDLER.format();    
    } 

    @Override 
    public int parseArguments(Parameters params) throws CmdLineException { 
    int counter; 
    for (counter = 0; counter < params.size(); counter++) { 
     String param = params.getParameter(counter); 
     if(param.startsWith("-")) { 
     break; 
     } 
     setter.addValue(param); 
    } 
    return counter; 
    } 
} 
2

最簡單的答案是使用內置的默認args4j StringArrayOptionHandler:

import org.kohsuke.args4j.spi.StringArrayOptionHandler; 

/.../

@Option (name = "-o", aliases = {"--amoreclarifyingoptionname"}, 
    handler=StringArrayOptionHandler.class, 
    usage = "How to use it") 
private String[] option; 

然後加入的碎片選項:

String getOption() { 
    StringBuilder cmd = new StringBuilder(); 
    for (int i = 0; i < option.length; i++) { 
     cmd.append(option[i]); 
     cmd.append(" "); 
    } 
    return cmd.toString().trim(); 
} 
相關問題