从表达式中分离 variables/arrays,并删除重复项?

Separating variables/arrays from an expression, and deleting duplicates?

我正在从表达式中分离出变量和数组名称,然后尝试删除重复项。我的代码适用于大多数表达式,但是当存在诸如 (a + A[a*2-b]) 的表达式时,我 运行 遇到了麻烦,因为由于 [=],我的程序将两个 a's 识别为单独的变量17=] 在第一个 a 之后。我觉得有一个简单的修复方法,但我无法弄清楚。有什么想法吗?

    public void buildSymbols() {

    String s = expr; //input from a different part of the program 
    scalars = new ArrayList<ScalarSymbol>(5);
    arrays = new ArrayList<ArraySymbol>(5); 

    for(int i = 0; i<s.length(); i++){
        if(Character.isLetter(s.charAt(i))){
            String temp = ""; // empty string to add on to

            while(i<s.length() && s.charAt(i)!= '*' && s.charAt(i)!= '/' && s.charAt(i)!= '[' && s.charAt(i)!= ']' && s.charAt(i)!= '+' && s.charAt(i)!= '-' && s.charAt(i)!= '(' && s.charAt(i)!= ')'){ // will form variables until delimiter is found (*/[]())
                temp = temp + s.charAt(i);
                i++;
            }
            if(i<s.length() && s.charAt(i) == '['){ //array 
                ArraySymbol addArr = new ArraySymbol(temp);
                    if(arrays.contains(addArr)){ // duplicate 
                        break;
                    }
                arrays.add(addArr);
            } else{ //variable 
                ScalarSymbol addSca = new ScalarSymbol(temp);
                if(scalars.contains(addSca)){ // duplicate 
                    break;
                }
                scalars.add(addSca);
            }
        }
    }
    System.out.println(arrays);
    System.out.println(scalars);
}

所以你的问题是你有两个变量:"a""a "String has a nice method called trim().

所以添加到您的代码中:

temp = temp.trim();

temp 会去掉两边的空格。

问题是当您找到一个同名变量时,您正在跳出 for 循环。您不应该 break 超出 for 循环。将 break 更改为 continue 以便您可以继续解析表达式但不将该变量添加到列表中。

if(arrays.contains(addArr)){ // duplicate 
    continue;
}