Стандартную функцию формы, такую как 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
операторов, чтобы проверить это.И это не совсем обычно, если у вас есть круглые скобки внутри скобок или более двух терминов внутри пары круглых скобок, вам придется добавить специальную логику для решения этой проблемы.