Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于Parens将字符串拆分为更小的部分_Java_Algorithm_Language Agnostic_String - Fatal编程技术网

Java 基于Parens将字符串拆分为更小的部分

Java 基于Parens将字符串拆分为更小的部分,java,algorithm,language-agnostic,string,Java,Algorithm,Language Agnostic,String,使用java,我试图开发一种使用递归分析字符串的方法: (PART0(PART1(PART2)(PART3))) 我希望该方法将相关字符串分开。我希望此方法能够在字符串的每个部分上执行一些逻辑,而不需要按此顺序使用括号: PART2 PART3 PART1 PART0 以下是我的方法当前的样子: private void check(String stmt) throws Exception { System.out.println(stmt); int firstInde

使用java,我试图开发一种使用递归分析字符串的方法:

(PART0(PART1(PART2)(PART3)))
我希望该方法将相关字符串分开。我希望此方法能够在字符串的每个部分上执行一些逻辑,而不需要按此顺序使用括号:

PART2
PART3
PART1
PART0
以下是我的方法当前的样子:

private void check(String stmt) throws Exception {

    System.out.println(stmt);
    int firstIndex = 0;
    int lastIndex = 0;
    while(firstIndex !=-1){
        firstIndex = stmt.indexOf('(');
        lastIndex = stmt.lastIndexOf(')');

        check(stmt.substring(firstIndex+1,lastIndex));

     }
}
以下是我目前的输出:

(PART0(PART1(PART2)(PART3)))
PART0(PART1(PART2)(PART3))
PART1(PART2)(PART3)
PART2)(PART3
基本上它在这一部分被分解了:第1部分(第2部分)(第3部分)


有没有更优雅的方法可以做到这一点?

嵌套上下文最自然地作为堆栈工作

-每次启动新上下文时(遇到“(”)push()

-每次退出上下文时(遇到“'))pop()

-然后,每个pop()将对应于完整的上下文

i、 e:

public static void main(String args[])
    {
         String s   = "(PART0(PART1(PART2)(PART3)))";
        Stack<StringBuilder> stack = new Stack<StringBuilder>();
        StringBuilder curr = null;
        for (int i = 0; i < s.length(); i++)
        {
            char c = s.charAt(i);
            if (c == '(')
            {
                curr = new StringBuilder();
                stack.push(curr);
            }
            else if (c == ')')
            {
                System.out.println(stack.pop());
            }
            else
            {
                curr.append(c);
            }
        }
    }
publicstaticvoidmain(字符串参数[])
{
字符串s=“(第0部分(第1部分(第2部分)(第3部分))”;
堆栈=新堆栈();
StringBuilder curr=null;
对于(int i=0;i

您可能还想添加一些错误检查,例如,如果没有要推送或弹出的上下文,那么您就有不匹配的paren(格式错误的字符串)

嵌套上下文最自然地作为堆栈工作

-每次启动新上下文时(遇到“(”)push()

-每次退出上下文时(遇到“'))pop()

-然后,每个pop()将对应于完整的上下文

i、 e:

public static void main(String args[])
    {
         String s   = "(PART0(PART1(PART2)(PART3)))";
        Stack<StringBuilder> stack = new Stack<StringBuilder>();
        StringBuilder curr = null;
        for (int i = 0; i < s.length(); i++)
        {
            char c = s.charAt(i);
            if (c == '(')
            {
                curr = new StringBuilder();
                stack.push(curr);
            }
            else if (c == ')')
            {
                System.out.println(stack.pop());
            }
            else
            {
                curr.append(c);
            }
        }
    }
publicstaticvoidmain(字符串参数[])
{
字符串s=“(第0部分(第1部分(第2部分)(第3部分))”;
堆栈=新堆栈();
StringBuilder curr=null;
对于(int i=0;i
您可能还想添加一些错误检查,例如,如果没有要推送或弹出的上下文,那么您就有不匹配的paren(格式错误的字符串)