首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 求助:java正则替换字符串问题 [已结贴,结贴人:kisslan]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kisslan
    • 等级:
    发表于:2007-10-09 17:31:18 楼主
    <root id='tt'> <![CDATA[111      3333]]> <root>        <basisInfo> <![CDATA[111      3333]]>

    我想把 <![CDATA 标签里的空格替换成&nbsp;应该怎么写呀,有高手没

    另:CSDN改版后怎么变的这么慢??
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-09 21:12:161楼 得分:40
    不明白标签是什么  所以不太清楚楼主的要求

    是不是 转后变成这个效果:
    <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);
        }
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kisslan
    • 等级:
    发表于:2007-10-10 13:41:192楼 得分:0
    谢谢楼上的,问题巳解决:)

    不知道有没有更简便的正则来实现呢
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-10 13:50:363楼 得分:0
    replace("/\s*/", "&nbsp");
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-10 14:17:514楼 得分:0
    String.replaceAll(String regex, String replacement)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • shan1119
    • 等级:
    发表于:2007-10-10 15:28:135楼 得分:10
    Java code
    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);
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-10 16:39:526楼 得分:0
    小心]] > 之间的空格。赫赫。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kisslan
    • 等级:
    发表于:2007-10-11 10:41:507楼 得分:0
    大天使,大菜鸟 的方法不错,但是有点小问题
    当我的字符串是
    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> 这两个节点没有了,不知道可怎么解决

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kisslan
    • 等级:
    发表于:2007-10-11 11:04:568楼 得分:0
    噢写成这样就可以了
    Pattern p = Pattern.compile("(.*? <\\!\\[CDATA\\[)(.*?\\]\\]>.*)");

    还有是点小问题,有时候会出现 <item&nbsp;fit=''> 这种情况,就是把标签里的空格也替换了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kisslan
    • 等级:
    发表于:2007-10-11 11:12:179楼 得分:0
    晕,我刚才写的不对,就是写成("(.*? <\\!\\[CDATA\\[)(.*?\\]\\] >.*)");  这样才造成这样的错误

    只有等待大天使,大菜鸟来解决下了:)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kisslan
    • 等级:
    发表于:2007-10-15 09:11:4110楼 得分:0
    顶一下,没人了么?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • shan1119
    • 等级:
    发表于:2007-10-15 10:42:1411楼 得分:0
    Java code
    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);
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved