命令解析
对于命令
-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(); } }