仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 646|回复: 8
打印 上一主题 下一主题

[学习教程] JAVA编程:将HTML转化为TEXT的Java类

[复制链接]
老尸 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:11:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
一旦你有了思想,那你编的程序就有了灵魂,不管是什么语言到了你的手里都会是你的工具而已,他们的价值是能尽快帮助你实现你想要的目标。但是如果你没有了思想,那就像是海里的帆船失去了船帆,是很难到打海的另一边的。  为了撑持全文检索,有需要将HTML格局的文章转化为纯文本格局,因而我计划了一个基础的WebFormatter类,供应一个复杂的publicstaticStringhtml2text(Stringhtml),将HTML格局转化为Text:
/*
*File:WebFormatter.java
*Createdon2005-6-24
*Author:LiaoXuefeng,asklxf@163.com
*Copyright(C)2005,LiaoXuefeng.
*/
packagecom.mboker.blog.web.util;
importjava.util.*;
importjava.text.SimpleDateFormat;
/**
*Dosomeformatonwebdisplay.
*
*@authorXuefeng
*/
publicclassWebFormatter{
publicstaticStringhtml2text(Stringhtml){
StringBuffersb=newStringBuffer(html.length());
char[]data=html.toCharArray();
intstart=0;
booleanpreviousIsPre=false;
Tokentoken=null;
for(;;){
token=parse(data,start,previousIsPre);
if(token==null)
break;
previousIsPre=token.isPreTag();
sb=sb.append(token.getText());
start+=token.getLength();
}
returnsb.toString();
}
privatestaticTokenparse(char[]data,intstart,booleanpreviousIsPre){
if(start>=data.length)
returnnull;
//trytoreadnextchar:
charc=data[start];
if(c==<){
//thisisatagorcommentorscript:
intend_index=indexOf(data,start+1,>);
if(end_index==(-1)){
//theleftisalltext!
returnnewToken(Token.TOKEN_TEXT,data,start,data.length,previousIsPre);
}
Strings=newString(data,start,end_index-start+1);
//nowwegots="<...>":
if(s.startsWith("<!--")){//thisisacomment!
intend_comment_index=indexOf(data,start+1,"-->");
if(end_comment_index==(-1)){
//illegalend,buttreatascomment:
returnnewToken(Token.TOKEN_COMMENT,data,start,data.length,previousIsPre);
}
else
returnnewToken(Token.TOKEN_COMMENT,data,start,end_comment_index+3,previousIsPre);
}
Strings_lowerCase=s.toLowerCase();
if(s_lowerCase.startsWith("<script")){//thisisascript:
intend_script_index=indexOf(data,start+1,"</script>");
if(end_script_index==(-1))
//illegalend,buttreatasscript:
returnnewToken(Token.TOKEN_SCRIPT,data,start,data.length,previousIsPre);
else
returnnewToken(Token.TOKEN_SCRIPT,data,start,end_script_index+9,previousIsPre);
}
else{//thisisatag:
returnnewToken(Token.TOKEN_TAG,data,start,start+s.length(),previousIsPre);
}
}
//thisisatext:
intnext_tag_index=indexOf(data,start+1,<);
if(next_tag_index==(-1))
returnnewToken(Token.TOKEN_TEXT,data,start,data.length,previousIsPre);
returnnewToken(Token.TOKEN_TEXT,data,start,next_tag_index,previousIsPre);
}
privatestaticintindexOf(char[]data,intstart,Strings){
char[]ss=s.toCharArray();
//TODO:performancecanimprove!
for(inti=start;i<(data.length-ss.length);i++){
//comparefromdata[i]withss[0]:
booleanmatch=true;
for(intj=0;j<ss.length;j++){
if(data[i+j]!=ss[j]){
match=false;
break;
}
}
if(match)
returni;
}
return(-1);
}
privatestaticintindexOf(char[]data,intstart,charc){
for(inti=start;i<data.length;i++){
if(data[i]==c)
returni;
}
return(-1);
}
}
classToken{
publicstaticfinalintTOKEN_TEXT=0;//htmltext.
publicstaticfinalintTOKEN_COMMENT=1;//commentlike<!--comments...-->
publicstaticfinalintTOKEN_TAG=2;//taglike<pre>,<font>,etc.
publicstaticfinalintTOKEN_SCRIPT=3;
privatestaticfinalchar[]TAG_BR="<br".toCharArray();
privatestaticfinalchar[]TAG_P="<p".toCharArray();
privatestaticfinalchar[]TAG_LI="<li".toCharArray();
privatestaticfinalchar[]TAG_PRE="<pre".toCharArray();
privatestaticfinalchar[]TAG_HR="<hr".toCharArray();
privatestaticfinalchar[]END_TAG_TD="</td>".toCharArray();
privatestaticfinalchar[]END_TAG_TR="</tr>".toCharArray();
privatestaticfinalchar[]END_TAG_LI="</li>".toCharArray();
privatestaticfinalMapSPECIAL_CHARS=newHashMap();
privateinttype;
privateStringhtml;//originalhtml
privateStringtext=null;//text!
privateintlength=0;//htmllength
privatebooleanisPre=false;//isPretag?
static{
SPECIAL_CHARS.put(""",""");
SPECIAL_CHARS.put("<","<");
SPECIAL_CHARS.put(">",">");
SPECIAL_CHARS.put("&","&");
SPECIAL_CHARS.put("
乐观 该用户已被删除
沙发
发表于 2015-1-20 16:16:56 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
再见西城 该用户已被删除
板凳
发表于 2015-1-29 12:56:30 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
活着的死人 该用户已被删除
地板
发表于 2015-2-1 19:50:23 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
若天明 该用户已被删除
5#
发表于 2015-2-6 16:09:28 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
深爱那片海 该用户已被删除
6#
发表于 2015-2-28 06:06:26 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
飘灵儿 该用户已被删除
7#
发表于 2015-3-9 21:24:50 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-17 01:11:12 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
小妖女 该用户已被删除
9#
发表于 2015-3-23 12:01:04 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 17:33

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表