首页 > 试题广场 >

实现命令[-name jack, -age 20, -add

[问答题]
命令解析
对于命令
-name jack -age 20 -address "HangZhou ZheDa Road"
要变成[-name jack, -age 20, -address "HangZhou ZheDa Road"] 命令由参数和值对组成,参数以-开头,参数和值之间,值和值之间都是用空格隔开,双引号“ ”之间的值当做一个整体 来处理。所有参数和值只包括英文字母,数字,减号和双引号。
public class CommandParser
{

    public static void main(String[] args)
    {
        CommandParser cp = new CommandParser();
        String res = null;
        res = cp.parseCommand("-name jack -age 20 -address \"HangZhou ZheDa Road\"");
        System.out.println(res);
        res = cp.parseCommand("    -name jack -age 20 -address \"HangZhou ZheDa Road\"");
        System.out.println(res);
        res = cp.parseCommand("-name    jack -age 20    -address \"HangZhou ZheDa Road\"");
        System.out.println(res);
        res = cp.parseCommand("-name jack -age 20 -address \"HangZhou ZheDa Road   \"   ");
        System.out.println(res);
    }
    String parseCommand(String com)
    {
        //分解成多个参数-值对
        String pars[] = com.split("-");
        StringBuilder sb = new StringBuilder();
        sb.append("[-");
        String words[] = null;
        //循环抽取其中的命令和值
        for (int i = 0; i < pars.length; i++)
        {
            String tmp = pars.trim();
            //判断这个值是否是非空格
            if (tmp != null && tmp.length() > 0)
            {
                int j = tmp.indexOf(' ');
                int k = j;
                sb.append(tmp.substring(0, j));
                sb.append(' ');
                //找到下一个空格的地方
                while (k < tmp.length() && tmp.charAt(k) == ' ')
                {
                    k++;
                }
                sb.append(tmp.substring(k));
                if (i != pars.length - 1)
                {
                    sb.append(',');
                }
                else
                {
                    sb.append(']');
                }
            }
        }
        return sb.toString();
    }
}

发表于 2014-11-13 21:34:36 回复(0)