如题,我们平时会用split去分割一个字符串,可是分割完以后只留下了不含正则表达式内容的其他内容,而我想只是把含有正则表达式的字符串单独分开而已,比如:aaaaa{bbbb}ccccc{ddddd}eeeee,用split对{}进行分离后就变成了aaaaa,ccccc,eeeee。而我想要的是aaaaa,{bbbb},ccccc,{ddddd},eeeee。请问高手们这样用什么方法呢?

解决方案 »

  1.   

    public class Test5 {    public static void main(String[] args) {
            String str = "aaaaa{bbbb}ccccc{ddddd}eeeee";
            String[] strs = str.split("(?=\\{)|(?<=\\})");
            for(int i = 0; i < strs.length; i++) {
                System.out.println(strs[i]);
            }
        }
    }
      

  2.   

    同意楼上的   
             
                 
               
    --------------完美的签名线-----------------
    网页游戏开发第一站 http://dev.web863.com
      

  3.   

    是可以的哦,但是我要是<!-- BEGIN DYNAMIC : somePictures -->\n<img src={PICTURE}>\n<!-- END DYNAMIC : somePictures -->这样格式的而不是{……}的格式也可以吗?
    就是这样的正则表达式:"\\<\\!-- BEGIN DYNAMIC \\: (\\w+) -->([\\d\\D]*?)\\<\\!-- END DYNAMIC : \\1 -->"
      

  4.   


    (?=)、(?<=) 是匹配字符间空隙的,把满足条件的从字符间的缝隙进行拆分。这个可能不好理解,有兴趣的话看看这个帖子:
    http://topic.csdn.net/u/20080716/22/80cdd418-a0e9-4e7e-8435-df6d4bc11c4a.html
      

  5.   

    其实lz你把那个正则就感性的理解为:把右边是“{”或者左边是“}”的空隙(并不是字符而是一个空隙)当成一个split的分隔符,然后把字符串分隔开,我解释的有不对的地方,望火龙果指正。另外下边有个投机取巧的写法,lz看个乐就好啦,嘿嘿。 String s = "aaaaa{bbbb}ccccc{ddddd}eeeee";
    s = s.replaceAll("\\{", ",{");
    s = s.replaceAll("\\}", "},");
    System.out.println(s);
      

  6.   

    都说的有道理,可是我要匹配的现在不是大括号这么简单而是<!-- BEGIN DYNAMIC : somePictures -->\n<img src={PICTURE}>\n<!-- END DYNAMIC : somePictures -->"里<!-- BEGIN DYNAMIC :  ……-->……<!-- END DYNAMIC : …… -->",这个好像用火龙果的方法就做不到了吧
      

  7.   

    safgdgd<!-- BEGIN DYNAMIC : somePictures -->\n <img src={PICTURE}>\n <!-- END DYNAMIC : somePictures -->dfhfghgfjh
    我想要safgdgd,<!-- BEGIN DYNAMIC : somePictures -->\n <img src={PICTURE}>\n <!-- END DYNAMIC : somePictures -->,dfhfghgfjh
      

  8.   

    我自己解决了,不用split方法。
    ArrayList list=new ArrayList();
    boolean end=false;
    while(!end)
    {
        p=Pattern.compile("\\<\\!-- BEGIN DYNAMIC \\: (\\w+) -->([\\d\\D]*?)\\<\\!-- END DYNAMIC : \\1 -->");
        match=p.matcher(str1);
        int start=0; 
        if(match.find())
        {
    int i=str1.indexOf(match.group());
    if(start<i)
    {
    list.add(str1.substring(start,i));
    list.add(match.group());
    start=i+match.group().toString().length();
    str1=str1.substring(start);
    }
        }
        else
        {
    list.add(str1);
    end=true;
        }
    }