找到第一个外括号 [英] Find the first outer brackets
本文介绍了找到第一个外括号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要找出第一个最外面的(非嵌套的)括号索引。
I need to find out the first outermost(not nested) brackets indexes.
例如
[] output: 0, 1
1[2] output: 1, 3
3[a2[c]]2[abc]3[cd] output: 1, 7
我可以通过很多条件找到它,当前代码为:
I can find it by lots of conditions, current code:
public static void main(String[] args) {
String input = "3[a2[c]]2[abc]3[cd]ef";
int first = 0;
int second = 0;
int count = 0;
boolean found = false;
for (int index = 0; index < input.length(); index++) {
if (input.charAt(index) == '[') {
count++;
if (found == false) {
found = true;
first = index;
}
} else if (input.charAt(index) == ']') {
count--;
if (found && count == 0) {
second = index;
break;
}
}
}
System.out.println(first);
System.out.println(second);
}
是否还有更多的干净
Is there more clean
way to do it?
推荐答案
使用 Stack
可能更多优雅:
String input = "3[a2[c]]2[abc]3[cd]ef";
Stack<Integer> stack = new Stack<> ();
int first = -1;
int second = -1;
for (int index = 0; index < input.length(); index++) {
if (input.charAt(index) == '[') {
stack.push(index);
} else if (input.charAt(index) == ']' && !stack.isEmpty ()) {
first = stack.pop ();
if (stack.isEmpty ()) {
second = index;
break;
}
}
}
if (first >= 0 && second >= 0) {
System.out.println(first);
System.out.println(second);
} else {
System.out.println ("not found");
}
这篇关于找到第一个外括号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文