如何将正则表达式实现为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)?
答案 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中的文本,或者其他什么