src/org/nutz/lang/util/CmdParams.java
public static CmdParams parse(String[] args, String boolChars, String boolRegex) {
        CmdParams params = new CmdParams();
        List<String> list = new ArrayList<String>(args.length);
        params.map = new NutMap();
        if (args.length > 0) {

            // 预编译 boolRegex
            Pattern bool_key = null;
            if (!Strings.isBlank(boolRegex)) {
                bool_key = Pattern.compile(boolRegex);
            }

            // 预编译 boolChars，如果匹配这个正则表达式的参数，将被认为是一个布尔参数
            // 支持 -bish 这样的组合形式
            Pattern bool_char = null;
            if (!Strings.isBlank(boolChars)) {
                bool_char = Pattern.compile("^-([" + boolChars + "]+)$");
            }

            // 参数表 ...
            int i = 0;
            Matcher m;
            for (; i < args.length; i++) {
                String s = args[i];
                // boolChars
                // 是否是布尔值表
                if (null != bool_char) {
                    m = bool_char.matcher(s);
                    if (m.find()) {
                        char[] cs = m.group(m.groupCount()).toCharArray();
                        for (char c : cs) {
                            params.map.put("" + c, true);
                        }
                        continue;
                    }
                }

                // 键值
                m = PARAM_KEY.matcher(s);
                if (m.find()) {
                    String key = m.group(m.groupCount());
                    // 键就是布尔值
                    if (null != bool_key && bool_key.matcher(key).matches()) {
                        params.map.put(key, true);
                    }
                    // 木有后面的值了，那么作为 boolean
                    else if (i >= args.length - 1) {
                        params.map.put(key, true);
                        break;
                    }
                    // 如果有值 ...
                    else {
                        s = args[i + 1];
                        if (s.matches("^-[a-zA-Z_].*$")) {
                            params.map.put(key, true);
                            continue;
                        }
                        params.map.put(key, s);
                        // 跳过下一个值
                        i++;
                    }
                }
                // 嗯，是普通值 ...
                else {
                    list.add(s);
                }
            }
        }
        params.vals = list.toArray(new String[list.size()]);
        return params;
    }
public static CmdParams parse(String[] args, String boolChars, String boolRegex) {
        CmdParams params = new CmdParams();
        List<String> list = new ArrayList<String>(args.length);
        params.map = new NutMap();
        if (args.length > 0) {

            // 预编译 boolRegex
            Pattern bool_key = null;
            if (!Strings.isBlank(boolRegex)) {
                bool_key = Pattern.compile(boolRegex);
            }

            // 预编译 boolChars，如果匹配这个正则表达式的参数，将被认为是一个布尔参数
            // 支持 -bish 这样的组合形式
            Pattern bool_char = null;
            if (!Strings.isBlank(boolChars)) {
                bool_char = Pattern.compile("^-([" + boolChars + "]+)$");
            }

            // 参数表 ...
            int i = 0;
            Matcher m;
            for (; i < args.length; i++) {
                String s = args[i];
                // boolChars
                // 是否是布尔值表
                if (null != bool_char) {
                    m = bool_char.matcher(s);
                    if (m.find()) {
                        char[] cs = m.group(m.groupCount()).toCharArray();
                        for (char c : cs) {
                            params.map.put("" + c, true);
                        }
                        continue;
                    }
                }

                // 键值
                m = PARAM_KEY.matcher(s);
                if (m.find()) {
                    String key = m.group(m.groupCount());
                    // 键就是布尔值
                    if (null != bool_key && bool_key.matcher(key).matches()) {
                        params.map.put(key, true);
                    }
                    // 木有后面的值了，那么作为 boolean
                    else if (i >= args.length - 1) {
                        params.map.put(key, true);
                        break;
                    }
                    // 如果有值 ...
                    else {
                        s = args[i + 1];
                        if (s.matches("^-[a-zA-Z_].*$")) {
                            params.map.put(key, true);
                            continue;
                        }
                        params.map.put(key, s);
                        // 跳过下一个值
                        i++;
                    }
                }
                // 嗯，是普通值 ...
                else {
                    list.add(s);
                }
            }
        }
        params.vals = list.toArray(new String[list.size()]);
        return params;
    }
public static CmdParams parse ( String [ ] args , String boolChars , String boolRegex ) { CmdParams params = new CmdParams ( ) ; List < String > list = new ArrayList < String > ( args . length ) ; params . map = new NutMap ( ) ; if ( args . length > 0 ) { // 预编译 boolRegex Pattern bool_key = null ; if ( ! Strings . isBlank ( boolRegex ) ) { bool_key = Pattern . compile ( boolRegex ) ; } // 预编译 boolChars，如果匹配这个正则表达式的参数，将被认为是一个布尔参数 // 支持 -bish 这样的组合形式 Pattern bool_char = null ; if ( ! Strings . isBlank ( boolChars ) ) { bool_char = Pattern . compile ( "^-([" + boolChars + "]+)$" ) ; } // 参数表 ... int i = 0 ; Matcher m ; for ( ; i < args . length ; i ++ ) { String s = args [ i ] ; // boolChars // 是否是布尔值表 if ( null != bool_char ) { m = bool_char . matcher ( s ) ; if ( m . find ( ) ) { char [ ] cs = m . group ( m . groupCount ( ) ) . toCharArray ( ) ; for ( char c : cs ) { params . map . put ( "" + c , true ) ; } continue ; } } // 键值 m = PARAM_KEY . matcher ( s ) ; if ( m . find ( ) ) { String key = m . group ( m . groupCount ( ) ) ; // 键就是布尔值 if ( null != bool_key && bool_key . matcher ( key ) . matches ( ) ) { params . map . put ( key , true ) ; } // 木有后面的值了，那么作为 boolean else if ( i >= args . length - 1 ) { params . map . put ( key , true ) ; break ; } // 如果有值 ... else { s = args [ i + 1 ] ; if ( s . matches ( "^-[a-zA-Z_].*$" ) ) { params . map . put ( key , true ) ; continue ; } params . map . put ( key , s ) ; // 跳过下一个值 i ++ ; } } // 嗯，是普通值 ... else { list . add ( s ) ; } } } params . vals = list . toArray ( new String [ list . size ( ) ] ) ; return params ; }
解析传入的参数表

<pre>
如果参数以 "-" 开头，则所谓名值对的键。
如果后面接着一个 "-" 开头的参数，则认为当前项目是布尔
当然，如果给入的参数 boolChars 或者 boolRegex 匹配上了这个参数，也认为是布尔
</pre>

@param args
参数表

@param boolChars
指明一个键的哪个字符是布尔值。 一个键如果全部内容都是布尔值，则分别记录。否则认为是一个普通键 <br>
你可以直接给一个正则表达式来匹配 boolChar，但是你的正则表达式必须得有 group(1) 表示内容

@param boolRegex
用一个正则表达式来描述哪些键（参数的整体）为布尔值

@return 参数表
解析传入的参数表