2016-09-30 5 views
0

У меня есть головоломка, мне нужно разделить возможную разнообразную строку математики на отдельные объекты для хранения в ArrayList.Регулярные выражения Java с математическими операторами

Ввод считывается со сканера, может быть любым из следующих.

Scanner input = new Scanner(System.in); 
String read = input.nextLine(); 
ArrayList al = new ArrayList(); 

-5 + 10 //possible value of read 
9--5 //possible value of read 
-20* 10 //possible value of read 

В принципе мне нужно, чтобы захватить первое число и потенциальный отрицательный знак, все игнорируя начальные или конечные пробелы и сохранить его, а затем принять следующий символ, игнорируя пробелы и сохранить его (оператор задачи), и затем следующее число с необязательным отрицательным знаком, снова игнорируя пробелы.

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

Если бы мне пришлось положить его логически, я бы сказал это таким образом:

Получить первый непробельный характер и конец в последний номер цифры, которые непосредственно следует за ним.

Получить на следующий непробельный символ

Получить следующий непробельный характер и конец в последний номер цифры, которые непосредственно следует за ним.

Любые указатели на синтаксис для этого?

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

+2

Вы не должны использовать регулярное выражение для этого, потому что он не будет масштабироваться с вложенными арифметическими выражениями. Скорее, вам нужен парсер. –

+0

Вам нужно использовать регулярное выражение? Если нет, проверьте этот [ответ] (http://stackoverflow.com/a/36341949/4256677) – varontron

ответ

0

не очень элегантно, но если вы ищете Regex, чтобы захватить числа как положительных, так и отрицательных, вы можете использовать это регулярное выражение

-?\d+|\*|\/|\+|\-

- ищет отрицательные числа

? делает его дополнительный поиск

\d ищет цифру

+ не хватает все, пока пробельных

трубы означают «или» так будет захватывать положительное отрицательное число, или *, или /, или + или -

Смежные вопросы