求助:java正则替换字符串问题 <root id='tt'><![CDATA[111 3333]]><root> <basisInfo><![CDATA[111 3333]]>我想把<![CDATA 标签里的空格替换成 应该怎么写呀,有高手没另:CSDN改版后怎么变的这么慢?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不明白标签是什么 所以不太清楚楼主的要求是不是 转后变成这个效果:<root id= 'tt ' > <![CDATA[111 3333]] > <root > <basisInfo > <![CDATA[111 3333]] >是的话 我的代码是: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",">"," "," "); System.out.println(result); }} String.replaceAll(String regex, String replacement) 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", " "); } System.out.println(rtn); 大天使,大菜鸟 的方法不错,但是有点小问题当我的字符串是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 22222]]></item><item fit='5'><![CDATA[111 22222]]></item><item fit='5'><![CDATA[111 22222]]>最后面的 </item></cicroxml> 这两个节点没有了,不知道可怎么解决 噢写成这样就可以了Pattern p = Pattern.compile("(.*?<\\!\\[CDATA\\[)(.*?\\]\\]>.*)");还有是点小问题,有时候会出现 <item fit=''> 这种情况,就是把标签里的空格也替换了 晕,我刚才写的不对,就是写成("(.*? <\\!\\[CDATA\\[)(.*?\\]\\] >.*)"); 这样才造成这样的错误只有等待大天使,大菜鸟来解决下了:) 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", " "); group = m.group(2); } rtn += str.substring(str.lastIndexOf(group)+group.length()); System.out.println(rtn); 大家帮忙看下怪异的出错(关于对象流的用法) 在国外的中国同胞向大家求助!关于getText()方法! Linux 和 Windows区别! 一道程序题 String.format在多线程下不可用 怎么产生数字不重复的随机数啊? 请问java 中有没有把asscii码转化为字符的内部函数! 在程序中如何保证只有一个connection呢? 再问 J2SE1.4中针对ZIP开发的问题! Ldap的高手请指教,如何在ldap中存放文件 请问:“synchronized”的用法? 构造函数前面可以加访问修饰词吗? 征求一个 JAVA开发的思路
<root id= 'tt ' > <![CDATA[111 3333]] > <root > <basisInfo > <![CDATA[111 3333]] >
是的话 我的代码是:
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",">"," "," ");
System.out.println(result);
}
}
" <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", " ");
}
System.out.println(rtn);
当我的字符串是
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 22222]]></item><item fit='5'><![CDATA[111 22222]]></item><item fit='5'><![CDATA[111 22222]]>
最后面的 </item></cicroxml> 这两个节点没有了,不知道可怎么解决
Pattern p = Pattern.compile("(.*?<\\!\\[CDATA\\[)(.*?\\]\\]>.*)");还有是点小问题,有时候会出现 <item fit=''> 这种情况,就是把标签里的空格也替换了
+ " <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", " ");
group = m.group(2);
}
rtn += str.substring(str.lastIndexOf(group)+group.length());
System.out.println(rtn);