字符串:
" 您好{"hyena":"comment","content":"paul","action":"user","targetId":15,"options":{}}
评论了您的{"hyena":"comment","content":"焦作云山","action":"trip","targetId":63,"options":{}}中的
 {"hyena":"comment","content":"图片","action":"picture","targetId":656,"options":{"trip":63}}"
如何将最外层大括号里的内容拿出来,并且替换掉呢?求大神帮忙啊?

解决方案 »

  1.   

     您好{"hyena":"comment","content":"paul","action":"user","targetId":15,"options":{}}
    评论了您的{"hyena":"comment","content":"焦作云山","action":"trip","targetId":63,"options":{}}中的
     {"hyena":"comment","content":"图片","action":"picture","targetId":656,"options":{"trip":63}}"正则可以判断,但是可以提取么?这个我不清楚。
    不过这题不难啊,我这网吧没有编译环境,就大体上说一下吧。
    String[] s;//存放(分开的字符串
    String[] ss;//存放s中由)分开的字符串
    String str="e(fe)fe";//str就是这个字符字符串,这里只是举个例子
    s=str.split("(");
    for(int i=0;i<s.length;i++){
    if(s[i].contains(")")){
    ss=s[i].split(")");
    system.out.println("符合条件的字符串为:"+s[0]);
    }
    }你测试下结果,如果不对回下贴,我再改改,感觉思路上没难度。
      

  2.   


    可以提取Pattern p = Pattern.compile("\\{.*?\\}}");

    Matcher m = p.matcher(s);

    while(m.find()){
    System.out.println(m.group());
    }
    如果楼主的都是这种格式的话我这个可以用用
      

  3.   


    public class Word { public static void main(String args[]){
    String str="您好{options{abc}}评论了您的{options{def}}中的{options{trip:63}}";
    ArrayList<String>  word=new ArrayList<String>();
    int m=0,n=0;
    int count=0;
    for(int i=0;i<str.length();i++){
    if(str.charAt(i)=='{'){
    if(count==0){
    m=i;
    }
    count++;
    }
    if(str.charAt(i)=='}'){
    count--;
    if(count==0){
    n=i;
    word.add(str.substring(m, n+1));
    }
    }

    }
    for(String a : word){
    System.out.println(a);
    }
    }
    }可以看下只提取出来了 没替换
      

  4.   

    split()
    repalce()
    还是用正则表达式比较好。
      

  5.   

    怎么这东东,怎么看怎么像 JSON
      

  6.   

    之前写过匹配一个个的计算公式的()的代码,希望对你有点帮助
    package com.study.regular;import java.util.ArrayList;
    import java.util.List;public class PiPei {
    public static void main(String[] args) {
    String s = "(((520+480)*38/10)/2*((520+480)*38/10)/2)) ";
    List<Char> list = new ArrayList<Char>();
    do{
    s = getString(s, list);
    }while(s != null && s.indexOf("(") != -1);
    for(Char c : list){
    System.out.println(c.str.substring(c.startIndex, c.endIndex + 1));
    }
    }

    public static String getString(String str, List<Char> list){
    char[] cs = str.toCharArray();
    boolean isStart = false;
    Char ch = new Char();
    ch.str = str;
    for(int i = 0; i < cs.length; i++){
    char c = cs[i];
    if(c == '('){
    if(!isStart){
    ch.startIndex = i;
    isStart = true;
    }
    ch.layer++;
    }else if (c == ')' && ch.layer > 0){
    ch.layer--;
    if(ch.layer == 0){
    ch.endIndex = i;
    list.add(ch);
    if(i != cs.length - 1){
    String last = str.substring(i + 1);
    do{
    last = getString(last, list);
    }while(last != null && last.indexOf("(") != -1);
    }
    break;
    }
    }
    }
    if(ch.endIndex != 0){
    return str.substring(ch.startIndex + 1, ch.endIndex);
    }
    return null;
    }}
    class Char{
    int startIndex;
    int endIndex;
    int layer;
    String str;
    }