Один быстрый способ исправить это - убедиться, что вы не разбили первый -
при разбиении строки на операнды.
String operands[]=a.split("(?<=\\d)[+-]");
Это регулярное выражение утверждает, что +
или -
должен сопровождаться ди git.
Таким образом, первый операнд будет -5
, который затем будет правильно проанализирован как Integer.parseInt
.
Если вы нужно только обрабатывать сложение и вычитание, вот еще один способ думать о проблеме: нет операторов, только операнды. В -5+20-15+8
есть только операнды -5
, +20
, -15
, +8
, и вам просто нужно сложить их все. Мы можем разбить строку на операнды на границе di git - [+-]
:
String[] operands = a.split("(?<=\\d)(?=[+-])");
и затем просто сложить их все:
int result = 0;
for (int i = 0 ; i < operands.length ; i++) {
result += Integer.parseInt(operands[i]);
}
// or:
// int result = Arrays.stream(operands).mapToInt(Integer::parseInt).sum();
System.out.println(result);