一个比较棘手的字符串处理,解决就给分

wazj0517 2007-11-29 07:46:44
从库里取出的内容包括了若干图片的url,如"http://www.sina.com.cn/aaa/ccc.jpg",因为要发mail,需要加上<img>标签,
处理后应为:"<img src=\"http:://www.sina.com.cn/aaa/ccc.jpg\"/>",开始考虑是用正则Pattern类处理,不过不熟悉,现在简单把"http" replaceall成"<img src=\"http>",".jpg" replaceall 成".jpg/>",可是现在有个问题,如果说有个http打头的URL,不是图片的地址,也给加上<img>了,所以还是得想个完美点的解决方法.
给出代码,马上给分
...全文
115 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wazj0517 2007-11-30
  • 打赏
  • 举报
回复
谢谢各位!!!
楼上的是比较完美的解决方法!!
正则表达式是解决这个问题的好办法,可惜我一直都没怎么用过
zhouyong80 2007-11-30
  • 打赏
  • 举报
回复
对shan1119的代码进行了更改后也实现了。不知道改得对不对,因为实验中发现shan1119的原代码中如果在图片URL前面出现一个其他的URL会出现错误。下面是我改后的程序,请高手指教

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test2 {

public static void main(String[] args) {
String str = "fasdfasdf,http://www.sina.com.cn/aaa/ccc.htmldasdfasdfahttp://www.sina.com.cn/aaa/ccc.jpg,,adfasdfsadfd,,,http://www.sina.com.cn/aaa/ddd.jpgsssshttp://www.sina.com.cn/aaa/eee.jpgssssssshttp://www.sina.com.cn/aaa/fff.jpg";
Pattern p = Pattern.compile("http://[^http]+?\\.jpg", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(str);
str = m.replaceAll("<img src=\"$0\"/>");
System.out.println(str);
}
}



实验了这个程序,结果是这样的。
fasdfasdf,http://www.sina.com.cn/aaa/ccc.htmldasdfasdfa<img src="http://www.sina.com.cn/aaa/ccc.jpg"/>,,adfasdfsadfd,,,<img src="http://www.sina.com.cn/aaa/ddd.jpg"/>ssss<img src="http://www.sina.com.cn/aaa/eee.jpg"/>sssssss<img src="http://www.sina.com.cn/aaa/fff.jpg"/>
zhouyong80 2007-11-30
  • 打赏
  • 举报
回复
我试着写了一个程序,不知道是不是符合你的要求,就直接用的String的方法,可能比较繁琐,性能也不是很好,不过我测试了一下,应该可以达到你的要求吧。请指正

public class Test2 {

public static void main(String[] args) {
String str = "fasdfasdf,http://www.sina.com.cn/aaa/ccc.htmldasdfasdfahttp://www.sina.com.cn/aaa/ccc.jpg,,adfasdfsadfd,,,http://www.sina.com.cn/aaa/ddd.jpgsssshttp://www.sina.com.cn/aaa/eee.jpgssssssshttp://www.sina.com.cn/aaa/fff.jpg";
int index = 0;
StringBuffer sb = new StringBuffer();
while((index = str.indexOf("jpg")) > 0) {
String str3 = "";
String str1 = str.substring(0, index + 3);
int index1 = str1.lastIndexOf("http");
if (index1 != -1) {
str3 = str1.substring(index1);
String str4 = str1.substring(0,index1);
sb.append(str4);
sb.append("<img src=\"");
sb.append(str3);
sb.append("/>");
}
str = str.substring(index + 3);
}
sb.append(str);
System.out.println(sb.toString());
}
}
shan1119 2007-11-30
  • 打赏
  • 举报
回复
String str = "http://www.sina.com.cn/aaa/ccc.jpg" +
" --- http://www.sina.com.cn/aaa/ccc.jpg" +
" --- http://www.sina.com.cn/aaa/ccc";
System.out.println(str.replaceAll("http://.+?\\.jpg", "<img src=\"$0\"/>"));
聪头 2007-11-30
  • 打赏
  • 举报
回复
恩,随便定义一个出现频率几乎为0的字串,替换就行了
tanlingyun 2007-11-30
  • 打赏
  • 举报
回复
通过判断地址的最后几个字母,判断是不图片
chengjf0526 2007-11-29
  • 打赏
  • 举报
回复
一楼说得不错!
改进一下!
String url = "http://www.sina.com.cn/aaa/ccc.jpg";
String[] imgType = {"jpg" , "png"};//用于存放可以显示的图片的后缀
for( int i = 0 ; i < imgType.length ; i ++ ){
if(url.endWith( imgType[i] )){
url = "<img src= '" + url + "'>";
break;
}
}

你自己试试!
飘摇清风 2007-11-29
  • 打赏
  • 举报
回复
同意一楼,具体函数有没有错那没太大关系,只要算法对就行。
sharpyuce 2007-11-29
  • 打赏
  • 举报
回复
是endsWith()写错了
sharpyuce 2007-11-29
  • 打赏
  • 举报
回复

不需要正则表达式吧:
把读出的URL赋值给一个String,例如:
String url = "http://www.sina.com.cn/aaa/ccc.jpg";
if(url.endWith(".jpg")){
"http" replaceall成" <img src=\"http> ",".jpg"replaceall 成".jpg/> ",
}

一样可以的哈,其实你的思路我认为很好的

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧