@daemon117733
Токарь чпу

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

String a = "5+3";

Я пишу калькулятор. Как строку преобразовать в математическое выражение?
  • Вопрос задан
  • 119 просмотров
Пригласить эксперта
Ответы на вопрос 3
leahch
@leahch
Я мастер на все руки, я козлик Элек Мэк :-)
Если по простому - разбивайте строку через 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
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы