элементы извлечения Java, разделенные запятой в строке - PullRequest
0 голосов
/ 29 мая 2018

У меня проблема с извлечением определенного типа элемента в строке.Строка выглядит так:

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

Я использую метод split, чтобы разделить три элемента строки выше, но я не могу найти регулярное выражение, которое позволяет мне рассматривать только запятые вне списка.

В предыдущем вопросе мне было предложено использовать это регулярное выражение:

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

Это регулярное выражение работает в некоторых случаях, но не в вышеописанном случае.Я пытался по-разному, но, честно говоря, я не нашел решение.

1 Ответ

0 голосов
/ 29 мая 2018

Используя regex, вы просто можете достичь этого с помощью рекурсии regex, но стандартная библиотека 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...