Расщепление строки с помощью арифметических операторов и функций в Java - PullRequest
0 голосов
/ 03 июня 2011

Мне нужно несколько советов о том, как разбить строку с помощью арифметических операторов и функций в Java для примера строка:

"string1"+"String2" >= 10 * function1() / function2()

операторы могут быть:

+ - * / ** / % / ( ) = != > < <= >=

после разделения Мне нужен вывод, как:

array[0]=string1
array[1]=string2
array[2]=10

Мне нужны только вещи в двойных кавычках и константах или числах, а не функции (function1 ()) или операторы.

Мне нужно регулярное выражение для этой проблемы

Ответы [ 3 ]

3 голосов
/ 03 июня 2011

Вы можете удалить все операторы из строки, а затем сопоставить все, кроме строк, с () в конце.

2 голосов
/ 03 июня 2011

Рекомендую создать парсер, например используя JavaCC или, возможно, пропаренный https://github.com/sirthias/parboiled/wiki/ (еще не пробовал)

1 голос
/ 03 июня 2011

Если вам нужно регулярное выражение для извлечения вещей из двойных кавычек и чисел, вы можете использовать этот код Java:

public static void main(String[] args) {
    Pattern p = Pattern.compile("\"(\\w+)\"|\\b\\d+\\b");
    Matcher m = p.matcher(
        "\"string1\"+\"String2\" >= 10 * function1() / function2()");
    List<String> parts = new ArrayList<String>();
    while (m.find()) {
        if (m.group(1) != null)
            parts.add(m.group(1));
        else
            parts.add(m.group(0));
    }
    System.out.println(Arrays.toString(parts.toArray(new String[] {})));        
}

, который выводит:

[string1, String2, 10]

Примечание: IЯ не уверен, что регулярное выражение является лучшим инструментом в этом случае.Как и предполагали другие, вы можете захотеть исследовать использование парсера.

...