<root id='tt'><![CDATA[111      3333]]><root>        <basisInfo><![CDATA[111      3333]]>我想把<![CDATA 标签里的空格替换成&nbsp;应该怎么写呀,有高手没另:CSDN改版后怎么变的这么慢?? 

解决方案 »

  1.   

    不明白标签是什么  所以不太清楚楼主的要求是不是 转后变成这个效果:
    <root id= 'tt ' > <![CDATA[111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3333]]&nbsp;> <root >         <basisInfo > <![CDATA[111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3333]]&nbsp;>
    是的话 我的代码是:
    public class StrC {
        
        public static String str=
                "<root id= 'tt ' > <![CDATA[111      3333]] > <root >         <basisInfo > <![CDATA[111      3333]] >";
        
        public String chang(String str, String start, String end, String s1, String s2)
        {
            int len1=0,len2=0;
            do{
                len1=str.indexOf("<![CDATA",len2);
                if (len1!=-1)
                {
                    len2=str.indexOf(">",len1);
                    String temp=str.substring(len1,len2);
                    temp=temp.replaceAll(s1,s2);
                    str=str.substring(0,len1)+temp+str.substring(len2);
                }
            } while (len1!=-1);
            
            return str;
        }
        
        public static void main(String[] args)
        {
            StrC sc=new StrC();
            String result=sc.chang(str,"<![CDATA",">"," ","&nbsp;");
            System.out.println(result);
        }
    }
      

  2.   

    String.replaceAll(String regex, String replacement)
      

  3.   

    String str = "<root id= 'tt ' > <![CDATA[111      3333]] > <root >" +
    "          <basisInfo > <![CDATA[222      4444]] > ";

    Pattern p = Pattern.compile("(.*?<\\!\\[CDATA)(.*?\\] >)");
    Matcher m = p.matcher(str);

    String rtn ="";
    while(m.find()){
    rtn += m.group(1) + 
    m.group(2).replaceAll("\\s", "&nbsp;");
    }
    System.out.println(rtn);
      

  4.   

    大天使,大菜鸟 的方法不错,但是有点小问题
    当我的字符串是
    String str = "<cicroxml><item fit='5'><![CDATA[111     22222]]></item><item fit='5'><![CDATA[111     22222]]></item><item fit='5'><![CDATA[111     22222]]></item></cicroxml>";这样的时候出来的结果为
    <cicroxml><item fit='5'><![CDATA[111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;22222]]></item><item fit='5'><![CDATA[111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;22222]]></item><item fit='5'><![CDATA[111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;22222]]>
    最后面的 </item></cicroxml> 这两个节点没有了,不知道可怎么解决
      

  5.   

    噢写成这样就可以了
    Pattern p = Pattern.compile("(.*?<\\!\\[CDATA\\[)(.*?\\]\\]>.*)");还有是点小问题,有时候会出现 <item&nbsp;fit=''> 这种情况,就是把标签里的空格也替换了
      

  6.   

    晕,我刚才写的不对,就是写成("(.*? <\\!\\[CDATA\\[)(.*?\\]\\] >.*)");  这样才造成这样的错误只有等待大天使,大菜鸟来解决下了:)
      

  7.   

        String str = "<root id= 'tt ' > <![CDATA[111      3333]] > <root >"
            + "          <basisInfo > <![CDATA[222      4444]] > 1";    Pattern p = Pattern.compile("(.*?)(<\\!\\[CDATA.*?\\] >)");
        Matcher m = p.matcher(str);    String rtn = "";
        String group = "";
        while (m.find()) {
          rtn += m.group(1) + 
          m.group(2).replaceAll("\\s", "&nbsp;");
          group = m.group(2);
        }
        rtn += str.substring(str.lastIndexOf(group)+group.length());
        System.out.println(rtn);