如何将字符串分解为参数,尊重引号?

可能重复:
正则表达式,用于在未被单引号或双引号括起时使用空格分割字符串

如何打破这样的字符串:

String args = "\"file one.txt\" filetwo.txt some other \"things here\""; 

在尊重引号的同时进入其参数/参数?

所以在上面的例子中,参数将被分解为:

 args[0] = file one.txt args[1] = filetwo.txt args[2] = some args[3] = other args[4] = things here 

我理解如何使用split(“”),但我想组合引号中的术语。

假设您不必使用正则表达式并且您的输入不包含嵌套引号,您可以在一次迭代中实现此字符串字符:

 String data = "\"file one.txt\" filetwo.txt some other \"things here\""; List tokens = new ArrayList(); StringBuilder sb = new StringBuilder(); boolean insideQuote = false; for (char c : data.toCharArray()) { if (c == '"') insideQuote = !insideQuote; if (c == ' ' && !insideQuote) {//when space is not inside quote split.. tokens.add(sb.toString()); //token is ready, lets add it to list sb.delete(0, sb.length()); //and reset StringBuilder`s content } else sb.append(c);//else add character to token } //lets not forget about last token that doesn't have space after it tokens.add(sb.toString()); String[] array=tokens.toArray(new String[0]); System.out.println(Arrays.toString(array)); 

输出:

 ["file one.txt", filetwo.txt, some, other, "things here"] 

如果您在引入依赖项时没有问题,可以使用Apache的Commons cli 。 它将简化命令行解析并使其更适用于用户。