在括号内读取数据

时间:2018-07-31 02:21:41

标签: java string

我有一个string之类的

String test = "Happy{{Sad}Blue{{Red}Green}}Purple"; 

如何提取括号之间的文本,如下所示

  1. {Sad}Blue{{Red}Green}
  2. Sad
  3. {Red}Green
  4. Red

2 个答案:

答案 0 :(得分:2)

我不应该,但是检查一下:

Matcher m = Pattern.compile(test.replace("{", "\\{(").replace("}", ")\\}")).matcher(test);
m.find();
for (int i = 1; i <= m.groupCount(); i++) {
    System.out.println(m.group(i));
}

Ideone Demo

答案 1 :(得分:0)

使用递归调用或堆栈数据结构来解决问题很容易。您可以了解背后的原因。这是一个示例:

  public static void main(String[] args) {
        String test = "Happy{{Sad}Blue{{Red}Green}}Purple";
        findStr(test);

    }
    public static void findStr(String str){
        if(str==null || str.equals("")){
            return ;
        }
        int begin =0;
        int end = 0;
        String theStr = "";
        for(int i =0;i<str.length();i++){
            if(str.charAt(i) == '{'){
                begin ++ ;
                if(begin > 1){
                    theStr += str.charAt(i);
                }
            } else if (str.charAt(i) == '}'){
                end ++ ;
                if(begin == end ){
                    System.out.println(theStr);
                    findStr(theStr);
                    begin = 0;
                    end = 0;
                    theStr = "";
                }else{
                    theStr += str.charAt(i);
                }
            }else if(begin > 0 ){
                theStr += str.charAt(i);
            }
        }

    }