所以我做了一个使用堆栈和列表的方法来做到这一点,但是我需要使用一个用于括号的递归方法来将其内容重写为后缀,然后返回解析后的表达式,将内容重写为原始表达式:
(5 + (3 * 2)+2)-1 original expression
(5 + (3 * 2)+2) first pair of parentheses
(3 * 2) second pair of parentheses
32* parsed expression to postfix
(5 + 32*+2) first pair of parentheses with replaced content
532*+2+ original expression parsed
我在考虑是否可以将原始表达式发送到列表中,并使用索引来获取括号的内容来重写它们,但我不知道如何用已解析的内容替换旧内容:>
public static void Parse(String infijo) {
IterableQueueListas<String> entranceList = new IterableQueueListas<>();
IterableQueueListas<String> exitList = new IterableQueueListas<>();
IterableStacksListas<String> stack = new IterableStacksListas<>();
String infix="";
String separate[] = infix.split("(?<=[-+*/%()])|(?=[-+*/%()])");
System.out.println(Arrays.toString(separada));
ArrayList<String> separateArray = new ArrayList<String>(Arrays.asList(separate));
if (separateArray.contains("(")) {
int fristposition = separateArray.indexOf("(");
int finalposition = separateArray.lastIndexOf(")");
int f = finalposition;
int z = fristposition + 1;
List<String> recursiv = separateArray.subList(z, f);
StringBuilder sb = new StringBuilder();
for (String s : recursiv) {
sb.append(s);
}
String subExpression = sb.toString();
System.out.println(subExpression);
separateArray.remove(f);
separateArray.remove(z - 1);
Parse(subExpression);
基本上,我想使用ArrayList替换旧表达式的括号内的解析表达式。
如果有人有建议或想法,我将不胜感激。