java提取元素在String中用逗号分隔

时间:2018-05-29 19:13:28

标签: java regex string

我在String中提取特定类型的元素时遇到问题。 字符串是这样的:

String input = [[2,3],[4,5],'hello',3,[3,[5,[6,7]]]],'hi',3

我正在使用split方法拆分上面字符串的三个元素,但我找不到允许我只考虑列表外的逗号的正则表达式。

在优先级问题中建议我使用此正则表达式:

,(?![^\[]*[\]]) 

这种正则表达式在某些情况下有效,但在上述情况下则不然。 我尝试过不同的方式,但说实话,我还没有找到解决方案。

1 个答案:

答案 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