Java 基于Parens将字符串拆分为更小的部分
使用java,我试图开发一种使用递归分析字符串的方法: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
(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(格式错误的字符串)