Большинство языков справляются с этим, делая это позже.Как сказал @Sweeper, -
будет оператором, и в дальнейшем код будет выбирать, является ли это двоичным или унарным оператором.Предполагая, что вы планируете оценить эти выражения в какой-то момент, выполнение этого способа на самом деле не будет слишком большой работой в конце.* из вашего цикла здесь
for(int j = i+1; eval.isOperator(String.valueOf(expression.charAt(j))) == false; j++)
Тогда это просто явная проверка:
if (value == "-" && isNumber(expression.charAt(j+1))
{
// I assume you have access to some sort of isNumber function
// and that you can check for an out of bounds access on your own
infix.add("-" + lexNumber(expression, j+1));
}
else if(eval.isOperator(value) == true)
{
infix.add(value);
}
else
{
// etc
}
Это грубый, непроверенный толчок в правильном направлении, который пропускает мелкие проблемы.В частности, проблема обновления индекса цикла.Я предлагаю новый класс для инкапсуляции источника выражения вместе с текущей позицией.Что-то вроде:
while (tokenStream.hasNext())
{
infix.add(tokenStream.next());
}