String 如何通过圆括号将字符串拆分为子字符串,同时又将子字符串放在其他子字符串中?

String 如何通过圆括号将字符串拆分为子字符串,同时又将子字符串放在其他子字符串中?,string,algorithm,substring,calculator,parentheses,String,Algorithm,Substring,Calculator,Parentheses,我试图编写一个计算器,并试图创建一个“子操作”类。 我想从一个大的输入中生成更小的子操作。例如: (4+5)是由ParamA(4)ParamB(5)和运算符(+)组成的子操作。 问题是,我想让它(4+(6+5))是另一个内部的子操作 我想它会在适当的时候给我带来问题,但我还不能忘记输入识别部分 我设法让它得到这个字符串“(4+5)/(6-8)”,并将它在(4+5)和(6-8)之间分开。 问题在于当我试图得到。。。 这个:((4+5)-7) 分为:(4+5),(4+5)-7 我试图在不同的数组上保

我试图编写一个计算器,并试图创建一个“子操作”类。 我想从一个大的输入中生成更小的子操作。例如: (4+5)是由ParamA(4)ParamB(5)和运算符(+)组成的子操作。 问题是,我想让它(4+(6+5))是另一个内部的子操作

我想它会在适当的时候给我带来问题,但我还不能忘记输入识别部分

我设法让它得到这个字符串“(4+5)/(6-8)”,并将它在(4+5)和(6-8)之间分开。 问题在于当我试图得到。。。 这个:((4+5)-7)

分为:(4+5),(4+5)-7

我试图在不同的数组上保存左括号和右括号索引, 然后找出一个模式来获得子字符串,但我被卡住了

大概是这样的:

公共ArrayList findOperations(){

ArrayList operations=new ArrayList();
ArrayList start=新建ArrayList();
ArrayList end=新的ArrayList();
int指数=0;
for(char c:this.input.toCharArray()){
if(Character.toString(c).equals(“”){
开始。添加(索引);
}
if(Character.toString(c).equals(“)”){
结束。添加(索引);
}
}
int indexNow=0;
用于(int st:start){
if(start.get(indexNow++)>end.get(indexNow)){
add(input.substring(st,end.get(indexNow));
}
否则{
打破
}
indexNow++;
}
返回操作;
}
澄清: 我想要一个像这样获取和输入的方法: "((4+5)-6)" 并返回如下字符串数组: [“(4+5)-6”,“4+5”]


有什么想法吗?这是我第一次开始学习,我觉得我需要一些认真的帮助。感谢您的耐心。

我发现从解释/示例中不容易理解您试图实现的目标分类:我想要一个方法,它获取和输入如下:((4+5)-6)”并返回如下字符串数组:[(4+5)-6”,“4+5”]提示:使用递归函数比严格使用迭代循环更容易处理括号。同意stef。尝试一些递归练习,然后重新讨论这个问题。也许你遇到了一个更难的问题,你现在可以自己解决。我还没有找到一个正确的答案,所以我有一个想法:改为“由内而外”?
    ArrayList<String> operations = new ArrayList();
    ArrayList<Integer> start = new ArrayList();
    ArrayList<Integer> end = new ArrayList();

    int index = 0;

    for (char c : this.input.toCharArray()) {

        if (Character.toString(c).equals("(")) {
            start.add(index);
        }

        if (Character.toString(c).equals(")")) {
            end.add(index);
        }

    }


    int indexNow=0;

    for(int st:start){

      if(start.get(indexNow++)>end.get(indexNow)){
                operations.add(input.substring(st,end.get(indexNow)));
            }
      else{
          break;
      }


      indexNow++;
    }




    return operations;
}