src/main/java/wycc/util/OptArg.java
public static Map<String,Object> parseOptions(List<String> args, OptArg... options) {
		HashMap<String,Object> result = new HashMap<>();
		HashMap<String,OptArg> optmap = new HashMap<>();

		for(OptArg opt : options) {
			if(opt.defaultValue != null) {
				result.put(opt.option, opt.defaultValue);
			}
			optmap.put(opt.option, opt);
			optmap.put(opt.shortForm, opt);
		}

		Iterator<String> iter = args.iterator();
		while(iter.hasNext()) {
			String arg = iter.next();
			if (arg.startsWith("-")) {
				arg = arg.substring(1,arg.length());
				OptArg opt = optmap.get(arg);
				if(opt != null) {
					// matched
					iter.remove(); // remove option from args list
					Kind k = opt.argument;
					if(k != null) {
						String param = iter.next();
						iter.remove();
						k.process(opt.option,param,result);
					} else {
						result.put(opt.option,null);
					}
				} else {
					throw new RuntimeException("unknown command-line option: -" + arg);
				}
			}
		}

		return result;
	}
public static Map<String,Object> parseOptions(List<String> args, OptArg... options) {
		HashMap<String,Object> result = new HashMap<>();
		HashMap<String,OptArg> optmap = new HashMap<>();

		for(OptArg opt : options) {
			if(opt.defaultValue != null) {
				result.put(opt.option, opt.defaultValue);
			}
			optmap.put(opt.option, opt);
			optmap.put(opt.shortForm, opt);
		}

		Iterator<String> iter = args.iterator();
		while(iter.hasNext()) {
			String arg = iter.next();
			if (arg.startsWith("-")) {
				arg = arg.substring(1,arg.length());
				OptArg opt = optmap.get(arg);
				if(opt != null) {
					// matched
					iter.remove(); // remove option from args list
					Kind k = opt.argument;
					if(k != null) {
						String param = iter.next();
						iter.remove();
						k.process(opt.option,param,result);
					} else {
						result.put(opt.option,null);
					}
				} else {
					throw new RuntimeException("unknown command-line option: -" + arg);
				}
			}
		}

		return result;
	}
public static Map < String , Object > parseOptions ( List < String > args , OptArg ... options ) { HashMap < String , Object > result = new HashMap <> ( ) ; HashMap < String , OptArg > optmap = new HashMap <> ( ) ; for ( OptArg opt : options ) { if ( opt . defaultValue != null ) { result . put ( opt . option , opt . defaultValue ) ; } optmap . put ( opt . option , opt ) ; optmap . put ( opt . shortForm , opt ) ; } Iterator < String > iter = args . iterator ( ) ; while ( iter . hasNext ( ) ) { String arg = iter . next ( ) ; if ( arg . startsWith ( "-" ) ) { arg = arg . substring ( 1 , arg . length ( ) ) ; OptArg opt = optmap . get ( arg ) ; if ( opt != null ) { // matched
 iter . remove ( ) ; // remove option from args list
 Kind k = opt . argument ; if ( k != null ) { String param = iter . next ( ) ; iter . remove ( ) ; k . process ( opt . option , param , result ) ; } else { result . put ( opt . option , null ) ; } } else { throw new RuntimeException ( "unknown command-line option: -" + arg ) ; } } } return result ; }
Parse options from the list of arguments, removing those which are
recognised. Anything which is not recognised is left as is.

@param args
--- the list of argument strings. This is modified by removing
those which are processed.
@param options
--- the list of OptArg defining which options should be
processed
@throws --- a <code>RuntimeException</code> if an unrecognised option is
encountered (that is, a token starting with '-')..
Parse options from the list of arguments removing those which are recognised . Anything which is not recognised is left as is .