求处理一段字符串的程序!!

noobie 2007-12-01 10:46:09
想写一个方法,把一个HTML代码读进来,然后取出<img>标签里的SRC属性值,再判断如果是"http://"开头的就保留,如果不是"http://"开头的(而是本地路径,如"C:")则保留图片文件名,把路径替换为image/filename。再将这个值放回原位。

先谢谢大家啦~~~
...全文
184 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
noobie 2007-12-03
  • 打赏
  • 举报
回复
我现在用这种方法可以将所有<img>标签中src值取出来
TEST.txt 如下
<html dir="ltr"><head><title>预览</title><Base href=http://192.168.0.35:8080/portal/ ><link href="/manager/HtmlEditor/editor/css/fck_editorarea.css" rel="stylesheet" type="text/css" /></head><body><p>This is a test case.</p><p>In order to show the the String which need to be deal with.</p><p>Example image<img alt="" src="C:\Documents and Settings\user\My Documents\My Pictures\Google Talk\Bear.bmp" /> and another picture <img alt="" src="C:\Documents and Settings\user\My Documents\My Pictures\Google Talk\Sun.bmp" />and <img alt="纳什:考虑加盟德州球队三强中当属火箭希望最大" src="http://i0.sinaimg.cn/ty/k/2007-12-01/U2138P6T12D3329804F44DT20071201022602.jpg" border="1" /><br /> </p></body></html>


程序源码

import java.io.*;
import java.util.*;
import javax.swing.text.*;
import javax.swing.text.html.*;
import javax.swing.text.html.parser.*;

/**
* 解析HTML文件中特定元素
* LINK href
* A href
* IMG src
* SCRIPT src
*
*/
public class ParseHtml {
public static void main(String args[]) {
ParseHtml ph = new ParseHtml();

try {
String filename = "e:\\TEST.txt";
BufferedReader brd = new BufferedReader(new FileReader(filename));
char[] str = new char[50000];
brd.read(str);
String sHtml = new String(str);

startParse(sHtml);
} catch (Exception e) {
e.printStackTrace();
}
}

private static void startParse(String sHtml) {
try {
ParserDelegator parser = new ParserDelegator();
HTMLEditorKit.ParserCallback callback = new Callback();
parser.parse(new StringReader(sHtml), callback, true);
} catch (Exception e) {
e.printStackTrace();
}
}

static class Callback extends HTMLEditorKit.ParserCallback {
public void handleSimpleTag(HTML.Tag t, MutableAttributeSet a, int pos) {
if (t.equals(HTML.Tag.IMG)) {
String src = (String) a.getAttribute(HTML.Attribute.SRC);
if(!src.trim().substring(0, 6).equals("http:/")) {
src = "image/" + src.substring(src.lastIndexOf("\\") + 1).trim();

System.out.println(src);
}

// count++;
}
// if (t.equals(HTML.Tag.LINK)) {
// String href = (String) a.getAttribute(HTML.Attribute.HREF);
// System.out.println("No." + count + " LINK src=" + href);
// count++;
// }
}

public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) {
if (t.equals(HTML.Tag.A)) {
String src = (String) a.getAttribute(HTML.Attribute.HREF);
System.out.println(src);
// count++;
}
if (t.equals(HTML.Tag.SCRIPT)) {
String src = (String) a.getAttribute(HTML.Attribute.SRC);
System.out.println(src);
// count++;
}
}

}
}


输出结果
image/Bear.bmp
image/Sun.bmp

但是我现在不知道如何将新生成的两个新的src写回去
noobie 2007-12-01
  • 打赏
  • 举报
回复

下面就是例子
<code>
<html dir="ltr"><head><title>预览</title><Base href=http://192.168.0.35:8080/portal/ ><link href="/manager/HtmlEditor/editor/css/fck_editorarea.css" rel="stylesheet" type="text/css" /></head>
<body><p>
<img alt="" src="C:\Documents and Settings\user\My Documents\My Pictures\Google Talk\Alien 1.bmp" /></p>
<center><img alt="英媒称英超队盯上郑智等4人冬季转会袭击查尔顿" src="http://i3.sinaimg.cn/ty/g/2007-11-30/U1022P6T12D3327977F44DT20071130081938.jpg" border="1" /><br /><img style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none" height="5" src="http://i0.sinaimg.cn/home/c.gif" width="1" alt="" /><br />郑智 <br /><br /></center><p>  新浪体育讯 本赛季的英冠联赛中,查尔顿队赛季初期失血严重,包括达伦-本特,马库斯-本特,卢克-扬,赫雷达森等多名主力球员相继投奔了英超其他球队,而查尔顿不得不买来不少其他球员替补昔日主力们纷纷离开后带来的空缺。</p></body></html>
<code>

我最后是想把第一个<img>中src="C:\Documents and Settings\user\My Documents\My Pictures\Google Talk\Alien 1.bmp"替换成src="image\Alien 1.bmp"
而第二个<img>中的src="http://i3.sinaimg.cn/ty/g/2007-11-30/U1022P6T12D3327977F44DT20071130081938.jpg"中保持不变


谢谢!~~~
believefym 2007-12-01
  • 打赏
  • 举报
回复
最好举个例子吧
篮球手 2007-12-01
  • 打赏
  • 举报
回复
建议用正则表达式,用dom解析有点大材小用,而且非常麻烦,不过我一直有心没时间看正则表达式,这里不能帮忙了!只能提点小小的建议
dylyonia 2007-12-01
  • 打赏
  • 举报
回复
正则表达式直接可以匹配到的。
noobie 2007-12-01
  • 打赏
  • 举报
回复


是个好办法

高手!!真厉害
!!!!
jaytse 2007-12-01
  • 打赏
  • 举报
回复
要用就用Dom先~~~
把HTML String按照dom来处理,然后取出img标签,遍历先
noobie 2007-12-01
  • 打赏
  • 举报
回复
嗯,我正在看正则表达式···
imA 2007-12-01
  • 打赏
  • 举报
回复
java程序也一样啊,同样是正则表达式替换,可能写法上和ultraedit有些不同。


我手边没有环境,所以不能给你代码。
noobie 2007-12-01
  • 打赏
  • 举报
回复
嗯~~~~
您说的我看过了,我想是我可能没说清楚我的目的。
我是想用java程序来替换

noobie 2007-12-01
  • 打赏
  • 举报
回复
谢谢!!!
非常感谢!!
我先看看,有不懂的地方再问您!
imA 2007-12-01
  • 打赏
  • 举报
回复
这个用ultraedit中的正则表达式就能办到,或者写一个java程序也是通过正则表达式替换也能办到。

关于使用ultraedit建议你看:
http://topic.csdn.net/u/20071130/11/3fd47a4b-7322-49c9-a913-64c60c517b40.html

关于ultraedit中正则表达式的用法建议你看:
http://hi.baidu.com/hahalyf/blog/item/2a670b454a63193c86947330.html
noobie 2007-12-01
  • 打赏
  • 举报
回复
嗯~
没有高手会么?


哭~~

62,623

社区成员

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

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