1

如何实现 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 个字符串。

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

类似问题如何按空格分割字符串但在引号内转义空格(在java中)?

4

2 回答 2

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]

于 2013-06-01T16:37:32.263 回答
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

你可以处理数组或列表中的文本,或者其他

于 2013-06-01T16:43:11.117 回答