java - 如何根据引号将字符串分解为参数?

标签 java string split

<分区>

Possible Duplicate:
Regex for splitting a string using space when not surrounded by single or double quotes

我怎样才能打破这样的字符串:

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<String> tokens = new ArrayList<String>();
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"]

关于java - 如何根据引号将字符串分解为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14654540/

相关文章:

java - 如何在 HttpClient 或 Html 单元中调用 javascript

string - 字符串 B 在 A 的子字符串中的最佳对齐方式 -- 生物信息学

linux - 根据固定长度将文件中的每一行拆分为带有分隔符的子字符串

python - 如何将列表拆分为大小相等的 block ?

linux - 为什么 linux split 程序对大于 20GB 的大文件有奇怪的行为?

java - 表达式的非法开始

模仿 chmod -R 755 的 java walkFileTree 不起作用

java - 谁能推荐一个Java富文本编辑器?

c - 什么解释了 C 编译器 w.r.t 字符串初始化的这种行为?

java - 在 Java 中实习的类