找不到regex
解決方案,但這裏是非regex
解決方案。它涉及在每個逗號之前解析數字(不包括大括號)(除非它是字符串中的最後一個數字)並且解析字符串(使用大括號)直到找到組的最後一個大括號。
如果找到正則表達式的解決方案,我很樂意看到它。
public static void main(String[] args) throws Exception {
String data = "1,2,{3,{4},5},{5,6},-7,{7,8},{8,{9},10},11";
List<String> list = new ArrayList();
for (int i = 0; i < data.length(); i++) {
if ((Character.isDigit(data.charAt(i))) ||
// Include negative numbers
(data.charAt(i) == '-') && (i + 1 < data.length() && Character.isDigit(data.charAt(i + 1)))) {
// Get the number before the comma, unless it's the last number
int commaIndex = data.indexOf(",", i);
String number = commaIndex > -1
? data.substring(i, commaIndex)
: data.substring(i);
list.add(number);
i += number.length();
} else if (data.charAt(i) == '{') {
// Get the group of numbers until you reach the final
// closing curly brace
StringBuilder sb = new StringBuilder();
int openCount = 0;
int closeCount = 0;
do {
if (data.charAt(i) == '{') {
openCount++;
} else if (data.charAt(i) == '}') {
closeCount++;
}
sb.append(data.charAt(i));
i++;
} while (closeCount < openCount);
list.add(sb.toString());
}
}
for (int i = 0; i < list.size(); i++) {
System.out.printf("Arr[%d]: %s\r\n", i, list.get(i));
}
}
結果:
Arr[0]: 1
Arr[1]: 2
Arr[2]: {3,{4},5}
Arr[3]: {5,6}
Arr[4]: -7
Arr[5]: {7,8}
Arr[6]: {8,{9},10}
Arr[7]: 11
有**無** [標籤:正則表達式]溶液,語言[上下文無關(https://en.wikipedia.org /維基/上下文free_language)。 – ShellFish
你好,我有這個代碼的問題 - 我怎麼能使它與負值的工作 - 它要麼刪除減號,要麼沒有它返回的一切。我確信可以快速修復它,但我無法找到它。 – uacnix
@uacnix查看更新後的答案 – Shar1er80