ты строку по пробелам рвёшь на токены.. ну так и вводи с пробелами
5 6 + 3 * 22 -
или вставляй пробелы где нужно программным образом... или изобретай регулярку, которая тебе порвёт всё как надо в любом виде... по условию задания ничего разве не ясно?
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner( System.in );
String rpn;
boolean divisionByZero = false;
while (true) {
System.out.print("Enter an arithmetic expression: ");
rpn = scanner.nextLine();
if (rpn.equals("")) {
break;
}
String[] tokens = rpn.split(" ");
int top = -1;
double[] stack = new double[tokens.length];
for (String token : tokens) {
if (token.matches("-?\\d+(\\.\\d+)?")) {
stack[++top] = Double.parseDouble(token);
} else if (token.equals("+")) {
stack[top - 1] += stack[top];
top--;
} else if (token.equals("-")) {
stack[top - 1] -= stack[top];
top--;
} else if (token.equals("*")) {
stack[top - 1] *= stack[top];
top--;
} else if (token.equals("/")) {
if (stack[top] == 0.0) {
divisionByZero = true;
break;
} else {
stack[top - 1] /= stack[top];
top--;
}
} else if (token.equals("^")) {
stack[top - 1] = Math.pow(stack[top - 1], stack[top]);
top--;
}
}
if (divisionByZero) {
System.out.println("Division by zero!");
divisionByZero = false;
continue;
} else {
System.out.printf("\nResult: %f\n\n", stack[0]);
}
}
scanner.close();
}
}