我在String中提取特定类型的元素时遇到问题。 字符串是这样的:
String input = [[2,3],[4,5],'hello',3,[3,[5,[6,7]]]],'hi',3
我正在使用split方法拆分上面字符串的三个元素,但我找不到允许我只考虑列表外的逗号的正则表达式。
在优先级问题中建议我使用此正则表达式:
,(?![^\[]*[\]])
这种正则表达式在某些情况下有效,但在上述情况下则不然。 我尝试过不同的方式,但说实话,我还没有找到解决方案。
答案 0 :(得分:0)
使用正则表达式,您可以使用正则表达式递归来实现它,但java的标准正则表达式库不支持递归。
但是你可以通过做类似的事情来实现你想做的事情:
String input = "[[2,3],[4,5],'hello',3,[3,[5,[6,7]]]],'hi',3";
String[] splited = input.split(",");
List<String> result = new ArrayList<String>();
int brackets = 0;
String aux = "";
for (String string : splited) {
char[] word = string.toCharArray();
// count the brackets
for (char c : word) {
if(c=='['){
brackets++;
}
else if(c==']'){
brackets--;
}
}
aux = aux + string;
// if all opened brackets are closed
if (brackets == 0) {
result.add(aux);
aux = "";
} else {
aux = aux + ",";
}
}
// the list 'result' contains 3 elemets. Each one is one element separeted by comma