Java Regex-分割逗号分隔的列表,但排除括号内的逗号
问题描述:
我正在尝试编写正则表达式,它将像这样拆分Java字符串:
I'm trying to write regex that will split a Java string like this:
300x250,468x60,300x400v(480x320,768x1024,100x100),400x300v,640x480v(200x200,728x90)
/ p>
in to something like this:
300x250
468x60
300x400v(480x320,768x1024,100x100)
400x300v
640x480v(200x200,728x90)
我一直在尝试 \,( )()?
,但是最后还要在括号中选择逗号。
I've been trying \,(\()?
but this ends up selecting the commas in the parentheses as well.
任何帮助表示感谢!
答
如果必须使用正则表达式,可以在,(?![^(] * \\))上拆分
If you have to use regex you can split on ,(?![^(]*\\))
如果没有,那么一个简单的字符迭代就可以解决问题
If not then one simple iteration over characters can do the trick
String data="300x250,468x60,300x400v(480x320,768x1024,100x100),400x300v,640x480v(200x200,728x90)";
List<String> tokens=new ArrayList<>();
StringBuilder buffer=new StringBuilder();
int parenthesesCounter=0;
for (char c : data.toCharArray()){
if (c=='(') parenthesesCounter++;
if (c==')') parenthesesCounter--;
if (c==',' && parenthesesCounter==0){
//lets add token inside buffer to our tokens
tokens.add(buffer.toString());
//now we need to clear buffer
buffer.delete(0, buffer.length());
}
else
buffer.append(c);
}
//lets not forget about part after last comma
tokens.add(buffer.toString());
String[] splitedArray=tokens.toArray(new String[tokens.size()]);
//lets test what is inside our array
for (String s : splitedArray)
System.out.println(s);
输出
300x250
468x60
300x400v(480x320,768x1024,100x100)
400x300v
640x480v(200x200,728x90)