@daemon117733
Токарь чпу

Как из строки вытащить оператор «+»?

String a = "5+3";

Я пишу калькулятор. Как строку преобразовать в математическое выражение?
  • Вопрос задан
  • 696 просмотров
Пригласить эксперта
Ответы на вопрос 3
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Если по простому - разбивайте строку через regexp.
String text = "5+(2-3*8/10)/123=ERR";
		Pattern pattern = Pattern.compile("[+|\\-|\\*|/|=|\\(|\\)]");
		Matcher matcher = pattern.matcher(text);
		
		int prev = 0;
		while(matcher.find()) {
			String operator = text.substring(matcher.start(), matcher.end());
			String operand = text.substring(prev, matcher.start());
			System.out.printf("Operand: '%s', operator: '%s'\n", operand, operator);
			prev = matcher.end();
		}
		if(prev > 0 && prev < text.length()) {
			String last = text.substring(prev, text.length());
			System.out.printf("Last: %s\n", last);
		}


Operand: '5', operator: '+'
Operand: '', operator: '('
Operand: '2', operator: '-'
Operand: '3', operator: '*'
Operand: '8', operator: '/'
Operand: '10', operator: ')'
Operand: '', operator: '/'
Operand: '123', operator: '='
Last: ERR

Ну а если по взрослому - то вам в antlr - https://www.antlr.org/ или javaCC - https://javacc.github.io/javacc/

ЗЫ. для antlr есть фал грамматики для калькулятора - https://github.com/antlr/grammars-v4/tree/master/c...
И на почитать - https://www.baeldung.com/java-antlr
Ответ написан
Комментировать
Если ты имеешь в виду разделить строку на символы по знаку, то тебе нужен метод split(String regex):

String a "5+3";
String[] a1 = a.split("");
System.out.println(a1[0]);
System.out.println(a1[1]);
System.out.println(a1[2]);

Вывод:
5
+
3

Поясняю: метод split(String regex) разделяет строку по символу(-ам), который ты поставишь в качестве аргумента. Возвращает этот метод массив из полученных строк. Если ты вставишь в виде аргумента пустую строку, то он вернет массив из символов строки "5+3": {"5", "+", "3"} ! А дальше ты сможешь сделать с ними уже что захочешь)
Ответ написан
Комментировать
@Cheypnow
Если нужен разбор вместе со скобками и знаками с разным приоритетом, смотрите лучше в сторону обратной польской нотации.
Один из примеров реализации на java
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
24 апр. 2024, в 20:35
5000 руб./за проект
24 апр. 2024, в 19:51
1000 руб./за проект