在操作数和运算符之间插入空格,让字符串越界

Inserting spaces In between operand and operators, getting String out of Bounds

我有一项任务是创建一个将中缀表达式转换为后缀的程序。我需要在操作数和运算符之间插入空格,出于某种原因我不断收到 StringIndexOutOfBounds。这是我的 java 流程代码。

public class Processor {
public String addSpace(String str){
    String finalstr = "";
    for (int i = 0; i < str.length(); i++) {
        if(Character.isDigit(str.charAt(i))){
            int x = i;
            String temp = "";
            do{
                temp+=str.charAt(x);
                x++;
            }while(Character.isDigit(str.charAt(x)));
            finalstr+=(temp+" ");
            System.out.println(temp+" added to final");
            i=(x-1);
            System.out.println(x+" is x and i is "+i);
        }
        else if(isOperator(str.charAt(i))){
            finalstr+=(str.charAt(i)+" ");
        }
    }
    return finalstr;
}

public boolean isOperator(char a){
    switch(a){
        case '+':
        case '-':
        case '/':
        case '*':
        case '(':
        case ')':
        return true;
        default: return false;
    }
}

在这个循环中

do {
    temp += str.charAt(x);
    x++;
} while (Character.isDigit(str.charAt(x)));

您增加 x 并在不检查该字符是否存在的情况下获取位置 x 处的字符。在字符串的末尾,如果字符是数字,则超出字符串的长度