使用String.split()的正则表达式

时间:2013-06-01 16:28:08

标签: java regex string split

如何将正则表达式实现为String.split()以按空格分隔值并忽略双引号文本?

如下例所示。

hello "Luis Anderson" your age is 30 and u will get $30

这个,字符串列表:

'hello', '"Luis Anderson"', 'your', 'age', 'is', '30', 'and', 'u', 'will', 'get', '$30'

问题在于,当我使用String.split()时,它还会考虑“Luis Enderson”之间的短语并将其分成2个字符串。

如果您有任何其他不包括正则表达式使用的想法,请解释一下,谢谢。

类似问题how to split string by space but escape spaces inside quotes (in java)?

2 个答案:

答案 0 :(得分:2)

如果它不必是正则表达式,那么您可以在一次迭代中对字符串字符执行此操作。

String data = "hello \"Luis Anderson\" your age is 30 and u will get $30";

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) {
        tokens.add(sb.toString());
        sb.delete(0, sb.length());
    } else
        sb.append(c);
}
tokens.add(sb.toString());// last word

System.out.println(tokens);

输出:[hello, "Luis Anderson", your, age, is, 30, and, u, will, get, $30]

答案 1 :(得分:2)

String s = "hello \"Luis Anderson\" your age is 30 and u will get $30";
        Pattern p = Pattern.compile("(?<=\\s|^)(\".*?\"|\\S*)(?=$|\\s)");
        Matcher m = p.matcher(s);
        while (m.find()) {
            System.out.println(m.group(1));
        }

输出:

hello
"Luis Anderson"
your
age
is
30
and
u
will
get
$30

你可以处理数组或List中的文本,或者其他什么