我有一個使用Java 1.5的問題,它涉及到計算一個字符串中括號的數量,但也忽略了它們內部的含義。我在網上看到很多示例,顯示如何計算括號,但我只想要父級括號。一種計算括號內數字的方法,不包括括號內的內容
一個例子是使用以下字符串:
someText[blarg[more text]and more]
因爲我想要的東西,得到的總的是一對。
我有一個使用Java 1.5的問題,它涉及到計算一個字符串中括號的數量,但也忽略了它們內部的含義。我在網上看到很多示例,顯示如何計算括號,但我只想要父級括號。一種計算括號內數字的方法,不包括括號內的內容
一個例子是使用以下字符串:
someText[blarg[more text]and more]
因爲我想要的東西,得到的總的是一對。
不能使用正則表達式爲這個(沒有在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等一些正則表達式引擎能夠適應遞歸,但這不是標準的。
如果你想指望父支架,你可以嘗試下:
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)堆棧。
我認爲'Deque'在這裏完全是過度殺傷。你基本上是用它作爲榮耀的櫃檯。 – arshajii
正則表達式不是這個工具。 – Michelle