I love ArgumentTokenizer in this answer , it's just a single class and solve the issue.
import java.util.LinkedList; import java.util.List; public abstract class ArgumentTokenizer { private static final int NO_TOKEN_STATE = 0; private static final int NORMAL_TOKEN_STATE = 1; private static final int SINGLE_QUOTE_STATE = 2; private static final int DOUBLE_QUOTE_STATE = 3; public static List<String> tokenize(String arguments) { return tokenize(arguments, false); } public static void main(String[] args) { for (String s : tokenize("-s -d \"String with space\" -d \"string with \\\" escape \\n the next line\"")) { System.out.println(s); } } public static List<String> tokenize(String arguments, boolean stringify) { LinkedList<String> argList = new LinkedList<String>(); StringBuilder currArg = new StringBuilder(); boolean escaped = false; int state = NO_TOKEN_STATE;
source share