有一字符串格式如下:(A(B)(C(D)(E))F) 字符串中的括号成对出现,写一java函数取出第N(以左括号出现的顺序来索引)对括号里的内容。

解决方案 »

  1.   


    public class Csdn1 {
    public static void main(String[] args) {
    String str = "(A(B)(C(D)(E))F)";
    System.out.println(getContent(5, str));
    }

    public static String getContent(int n, String str) {

    int start = -1, end = 0;
    char[] arr = str.toCharArray();
    int count = 0, j = 0;

    for (int i = 0; i < arr.length; i++) {
    if (arr[i] == '(') {
    count++;
    if (count == n) {
    start = i;//找到,记录开始位置
    j = 0; // 开始位置重置
    }
    if (i >= start) {
    j++; // 左( ++
    }
    }

    if (arr[i] == ')') {

    if (i >= start) {        //有开始位置才开始匹配结束
    j--; // 右( --
    } if (j == 0) {         //左右括号匹配完成后记录结束位置并跳出循环
    if (start == -1) {
    System.out.println("第" + n + "个元素不存在!");
    } else {
    end = i + 1;
    return str.substring(start, end);
    }
    }
    }
    }
    return "";
    }
    }