package util; import java.util.ArrayList; import java.util.List; public class CmdLineUtils { private CmdLineUtils() {} public static String[] parse(String line) throws Exception { line = line.trim(); if (line.length() == 0) return new String[0]; List<String> args = new ArrayList<>(); int i = 0; while (i < line.length() && line.charAt(i) != ' ') i ++; args.add("-" + line.substring(0, i)); while (i < line.length() && line.charAt(i) == ' ') i ++; while (i < line.length()) { StringBuffer sb = new StringBuffer(); if (line.charAt(i) == '"') { i ++; while (i < line.length()) { if (line.charAt(i) == '\\') { if (i + 1 >= line.length()) throw new IllegalArgumentException("Nothing after '\\'"); sb.append(line.charAt(i + 1)); i += 2; } else if (line.charAt(i) == '"') break; else { sb.append(line.charAt(i)); i ++; } } if (i == line.length()) { throw new IllegalArgumentException("'\"' does not match"); } else { i ++; } } else { while (i < line.length()) { if (line.charAt(i) == '\\') { if (i + 1 >= line.length()) throw new IllegalArgumentException("Nothing after '\\'"); sb.append(line.charAt(i + 1)); i += 2; } else if (line.charAt(i) == ' ' || line.charAt(i) == '"') break; else { sb.append(line.charAt(i)); i ++; } } } args.add(sb.toString()); while (i < line.length() && line.charAt(i) == ' ') i ++; } return args.toArray(new String[args.size()]); } }