Разделить строку Java с помощью регулярных выражений, а затем сохранить в стек - PullRequest
2 голосов
/ 05 апреля 2019

В моей логике есть ошибка для разбиения строки на основе регулярного выражения.Цель состоит в том, чтобы создать токенизатор для синтаксиса Python.У меня есть четыре простых регулярных выражения;цифры, числа с плавающей запятой, операторы и переменные.Я хочу извлечь первый набор из четырех перечисленных выше регулярных выражений в строку, а затем поместить его в свой стек.

String s = "123+abc+123abc";
String allRegex = String.format("%s|%s|%s|%s", digit, floats, operators, variable);
Pattern allRegexPattern = Pattern.compile(allRegex);
Matcher matchString = allRegexPattern.matcher(s);

int group = 1;
while (s != null)
{
    if (group == 5)
        group = 1;
    if (matchString.find())
    {
        String temp = matchString.group(group);
        if (temp != null)
        {
            tokens.add(temp);
            s = s.replace(temp, "");
        }
        else
            group++;

    }
}

//Expecting ["123","+","abc","+","123abc"] in my stack

В данный момент код работает бесконечно ..

1 Ответ

1 голос
/ 05 апреля 2019

Это будет делать:

public Stack<String> getStack(String expression){
    Stack<String> stack = new Stack<>();
    Pattern pattern = Pattern.compile("[0-9a-z]+|\\+|\\*");
    Matcher matcher = pattern.matcher(expression);
    while(matcher.find()) {
       stack.push(matcher.group());
    }
    System.out.println(stack.toString());
    return stack;
}
...