经常看见在敲打命令行的时候有“中划线 + 某个英文单词缩写”这样的flag.比如我现在有个应用(很简单),
当参数是-a的时候输出“aaaaaaa”
当参数是-b的时候输出“bbbbbbb”我就想知道这种中划线的参数传递,和普通的参数传递一样吗(传进来以后字符串匹配一下)
还是说java本身对这种类型的参数传递有什么特殊支持。不知道我有没有说清楚问题
当参数是-a的时候输出“aaaaaaa”
当参数是-b的时候输出“bbbbbbb”我就想知道这种中划线的参数传递,和普通的参数传递一样吗(传进来以后字符串匹配一下)
还是说java本身对这种类型的参数传递有什么特殊支持。不知道我有没有说清楚问题
public class CommandAnalyzer {
private Set<String> paremeters = new HashSet<String>();
/**
* Constructor
* @param command
*/
public CommandAnalyzer(String command){
//find arguments
if(command != null){
int pStart = command.indexOf(Command.PARAM_SEPERATOR);
String paremeter = command.substring(pStart);
String[] p = paremeter.split("" + Command.COMMAND_SEPERATOR);
for(String pair : p){
paremeters.add(pair);
}
}
}
/**
* Constructor
* @param paramerters
*/
public CommandAnalyzer(String[] paramerters){
//find arguments
if(paramerters != null){
for(String pair : paramerters){
if(pair.startsWith(Command.PARAM_SEPERATOR + "")){
paremeters.add(pair);
}
}
}
}
/**
* Get parameter value like -uroot when invoke getParameter("u"), would return "root"
* @param name
* @return parameter value
*/
public String getParameter(String name){
for(String p : paremeters){
String prefix = Command.PARAM_SEPERATOR + name;
if(p.startsWith(prefix)){
return p.substring(prefix.length());
}
}
return null;
}
public String toString(){
String command = "";
for(String p : paremeters){
command += p + " ";
}
return command;
}
}public interface Command {
/**
* Seperater of command and args
*/
char COMMAND_SEPERATOR = ' ';
/**
* Prefix of param
*/
char PARAM_SEPERATOR = '-';
}
public static void main(String[] args) {
for(String arg : args) {
if(arg.equals("-a")
System.out.println("aaaaa");
else if(arg.equals("-b")
System.out.println("bbbbb");
}
}
args4j: https://args4j.dev.java.net/