标准格式函数,如A * B + A * B'很容易解析(用+分割然后用*分割)。如果它没有采用标准形式,你如何解析一个函数? 示例:函数可以采用以下形式:
A*B+A(A+B')
A*B+(A+B')A
A*B+A*B(A+B)
有什么想法吗?
P.S:我想用Java解析函数。
答案 0 :(得分:0)
像A * B + A * B'这样的标准格式函数很容易解析(用+分割然后用*分割)。
好。现在,剩下的就是处理那些讨厌的括号。首先,我们将使用array.split
删除它们,然后我们将添加必要的逻辑来执行乘法运算:
分割字符串A(A+B')C
后,最终会得到一个包含三个字符串A
,A+B
和C
的数组。请注意,在此方法中,奇数字符串始终是括号内的字符串。所以我们要做的就是检查奇数字符串的最后和第一个字符是字母(A,B,C)还是运算符(*,+)。
String firstString = "A*B+A*B(A+B)+A*B+A*B(A+B)";
String leftOfParenthesis;
String insideParenthesis;
String rightOfParenthesis
String last;
String first;
String[] masterArray;
masterArray = str.split(firstString);
for(int i=0; i<masterArray.length; i+2){
leftOfParenthesis = masterArray[i];
insideParenthesis = masterArray[i+1];
rightParenthesis = masterArray[i+2];
last = leftOfParenthesis.substring(leftOfParenthesis.length()-1);
first = rightParenthesis.substring(0,1);
if(last.isLetter() && first.isLetter()){
leftOfParenthesis.append("*" + insideParenthesis + "*" +
last + "+last*" + insideParenthesis + "*" + first);
rightOfParenthesis[0] = last;
}
else if(last.isLetter()){
leftOfParenthesis.append("*" + insideParenthesis + "*" + last);
}
else if(first.isLetter()){
leftOfParenthesis.append("+" + first + "*" +
insideParenthesis + "*" );
}
}
这是基本逻辑。如果您超出输入字符串的末尾并且没有那么多条款,则rightParenthesis = masterArray[i+2];
会出现一些问题。因此,您必须添加一些if
语句来检查它。这并不是一般的,如果你在括号内括号或在一对括号内有两个以上的术语,你将不得不添加特殊的逻辑来处理它。
答案 1 :(得分:0)
而不是尝试使用临时方法(总是以糟糕的方式结束)进行解析 好转了