我在使用Java 1.5时遇到问题,包括计算字符串中括号的数量,但也忽略了它们内部的内容。我在网上看到很多示例如何计算括号,但我只想要父括号。
一个例子是使用以下字符串:
someText[blarg[more text]and more]
对于我想要的,结果总数将是一对。
答案 0 :(得分:6)
你不能使用正则表达式(至少不是Java),但你可以这样做:
int count = 0;
int brackets = 0;
for (char c : str.toCharArray()) { // str is the string you are searching
if (c == '[') {
if (brackets == 0) {
count++;
}
brackets++;
}
else if (c == ']') {
brackets--;
}
}
最后,count
将是顶级括号对的数量。
通常,正则表达式不适合处理递归结构,例如任意嵌套括号。一些正则表达式引擎(如Perl的引擎)能够适应递归,但这不是标准的。
答案 1 :(得分:0)
如果要计算父括号,可以尝试下一个:
public static void main(String[] args) {
String input = "[[]] [[]] [[[]]]";
int parents = 0;
Deque<Character> deque = new LinkedList<>();
for (char c : input.toCharArray()) {
switch (c) {
case '[':
deque.addLast(c);
break;
case ']':
deque.removeLast();
if (deque.isEmpty()) {
parents++;
}
break;
}
}
System.out.printf("Parents: %d", parents);
}
输出:
3
java.util.Deque
是后进先出(LIFO)堆栈。