Java 从表达式中分离变量/数组,并删除重复项?
我从表达式中分离出变量和数组名,然后尝试删除重复项。我的代码适用于大多数表达式,但当出现诸如Java 从表达式中分离变量/数组,并删除重复项?,java,expression,tokenize,Java,Expression,Tokenize,我从表达式中分离出变量和数组名,然后尝试删除重复项。我的代码适用于大多数表达式,但当出现诸如(a+a[a*2-b])之类的表达式时,我会遇到麻烦,因为我的程序将两个a识别为单独的变量,因为第一个a后面有空格。我觉得有一个简单的解决办法,但我想不出来。有什么想法吗 public void buildSymbols() { String s = expr; //input from a different part of the program scalars = new
(a+a[a*2-b])
之类的表达式时,我会遇到麻烦,因为我的程序将两个a
识别为单独的变量,因为第一个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);
}
public void buildSymbols(){
字符串s=expr;//来自程序不同部分的输入
标量=新数组列表(5);
数组=新的数组列表(5);
对于(inti=0;i,您的问题是您有两个变量:“a”
和“a”
因此,请在代码中添加:
temp = temp.trim();
问题是当你发现一个变量的名字与你要从for
循环中分离出来的名字相同时。你不应该从for
循环中分离出来。把分离改为继续,这样你就可以通过表达式继续解析,而不是添加在您的列表中至少有一个变量
if(arrays.contains(addArr)){ // duplicate
continue;
}
在解析表达式之前是否尝试删除空格?先删除空格,或添加空格作为分隔符,只会将结果a
作为变量,将a
作为数组。不知何故,使用此方法,我丢失了第二个变量b
。解析完后修剪变量名如何?相同结果,仍然丢失b
这给了我与首先删除空格相同的输出,我仍然丢失b
变量,如上面的注释所述。