Это потому, что приложение StringBuilder перекрывается с функцией, которая также принимает начальный и конечный индексы как подстрока.
Поэтому вместо использования
sb.append(equation.substring(i + 1, right));
вы можете просто использовать
sb.append(equation, i + 1, right);