Не точный ответ на конкретный вопрос, но что-то, что я бы порекомендовал для разработки алгоритмов такого типа: взгляните на тестовое развитие (TDD). Вкратце: напишите несколько модульных тестов - например, с помощью JUnit - для метода infix2, где вы кормите метод тестовыми шаблонами (выражениями) и test, если infix2 выдает правильный вывод.
Начните с простых, как
assertequals("1", "1"); // positive number
assertequals("-1", "-1"); // negative number
assertequals("1+1", "1 1 +"); // simple addition
assertequals(" 1 + 1 ", "1 1 +"); // simple addition with whitechars
assertequals(" 1 + +1 ", "1 -1 +"); // simple addition with pos. number & whitechars
assertequals(" 1 + -1 ", "1 -1 +"); // simple addition with neg. number & whitechars
assertequals("(1+1)", "1 1 +"); // simple addition with brackets
и не забывайте недопустимые выражения типа
String[] illegalExpressions = {null, "", " ", "1 +", "1 + 1)"};
Примеры тестов для вас должны быть
assertequals("52+(1+2)*4-3", "52 1 2 + 4 * 3 -");
assertequals("52+((1+2)*4)-3", "52 1 2 + 4 * 3 -");
assertequals("(52+1+2)*4-3", "52 1 + 2 + 4 * 3 -");