Разбить математическое выражение - PullRequest
0 голосов
/ 24 сентября 2018

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

Scanner in = new Scanner(System.in);
System.out.println("enter the expression :");
String infija = in.nextLine();
String separate[] = infix.split("(?=[-+*/%()])|(?<=[^-+*/%][-+*/])|(?<=[()])");

но когда явведите выражение с модулем m, код не разделяет его.

Например, введите

(2/3)+(2%1)

ожидаемый результат:

[(,2, /, 3,), +,(, 2, %, 1,)] 

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Это должно сделать,

    String myString= "(2/3)+(2%1)";
    String[] result = myString.split("(?<=[-+*/%()])|(?=[-+*/%()])");
    System.out.println(Arrays.toString(result));

вывод:

    [(, 2, /, 3, ), +, (, 2, %, 1, )]
0 голосов
/ 24 сентября 2018

Есть более простой способ:

String separate[] = infix.split("\\b|(?<=\\D)(?=\\D)");

Это разбивает на границу слова и между нецифрами.

В регулярном выражении символ "слово" - это любойцифра, буква или подчеркивание.Граница слова находится между словом char и несловом char (и наоборот).


Тестовый код:

 System.out.println(Arrays.toString("2/(3+2)%1".split("\\b|(?<=\\D)(?=\\D)")));

вывод:

[2, /, (, 3, +, 2, ), %, 1]
...