首页 > 试题广场 >

编写一个简单的命令行参数解析函数

[问答题]
编写一个简单的命令行参数解析函数,命令行的参数名用“-”加英文或数字组成,例如“-name”,后面跟着的部分是具体的值,命令行参数之间,参数与值之间用一个或多个连续的空格分隔。双引号中的内容作为一个整体看待,不进行解析。返回结果是被分割开的一个个参数和值。假定命令行的内容只会包含英文,数字,空格,双引号和减号。
例如,参数为:
-name Lily -age 21   -school "University of Oxford"
返回结果为:
[-name:Lily,-age:21,-school:"University of Oxford"]
function parsestr(str)
{
var bigarr=str.split("-");
var res=[];
for(var i=1;i<bigarr.length;i++)
{
var smallarr=[];
var obj={}
smallarr=bigarr[i].split(" ");
obj.key=smallarr[0];
obj.value=smallarr[1];
res.push(obj);
}
return res;
}
var as='-name Lily -age 21 -school "University of Oxford"';
console.log(parsestr(as));

编辑于 2015-09-20 17:35:40 回复(0)
/**
 * @param s 传入的命令行
 * @return 解析之后的命令行参数
 * @throws Exception 格式异常
 * @brief 命令行参数解析
 */
public String processCommandLineParameters(String s) throws Exception {
    StringBuffer stringBuffer = new StringBuffer();
    if (s == null || s.length() <= 1) {
        stringBuffer.append("[]").toString();
    }
    if (!s.trim().startsWith("-")) {
        throw new Exception("Command line parameters must start with -");
    }
    String[] temp = s.trim().split("-");

    stringBuffer.append("[");
    for (int i = 1; i < temp.length; i++) {
        String[] couple = temp[i].trim().split(" ", 2);
        if (couple.length != 2) {
            throw new Exception("Command line parameters format error ");
        }
        stringBuffer.append("-");
        stringBuffer.append(couple[0].trim());
        stringBuffer.append(":");
        stringBuffer.append(couple[1].trim());
        if (i != temp.length - 1)
            stringBuffer.append(",");
    }
    stringBuffer.append("]");
    return stringBuffer.toString();
}

发表于 2015-08-27 11:19:40 回复(0)
public StringBuilder parseCMD(String s) {
	StringBuilder sb = new StringBuilder();
	sb.append("[");
	String[] arr = s.split("-");
	for (int i = 0; i < arr.length; i++) {
		if (arr[i] != null && arr[i].length() > 1) {
			String[] a3 = arr[i].split("\"");
			if (a3.length > 1) {
				sb.append(a3[0].trim());
				sb.append(":");
				sb.append("\"");
				sb.append(a3[1].trim());
				sb.append("\"");
				sb.append(",");
			} else {
				String[] a2 = arr[i].trim().split(" ");
				sb.append("-");
				sb.append(a2[0]);
				sb.append(":");
				sb.append(a2[1]);
				sb.append(",");
			}

		}
	}
	sb.deleteCharAt(sb.length() - 1);
	sb.append("]");
	return sb;
}

编辑于 2015-07-16 11:48:18 回复(0)