仓酷云

标题: JAVA编程:将HTML转化为TEXT的Java类 [打印本页]

作者: 老尸    时间: 2015-1-18 11:11
标题: JAVA编程:将HTML转化为TEXT的Java类
一旦你有了思想,那你编的程序就有了灵魂,不管是什么语言到了你的手里都会是你的工具而已,他们的价值是能尽快帮助你实现你想要的目标。但是如果你没有了思想,那就像是海里的帆船失去了船帆,是很难到打海的另一边的。  为了撑持全文检索,有需要将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
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
作者: 再见西城    时间: 2015-1-29 12:56
是一种使网页(Web Page)产生生动活泼画面的语言
作者: 活着的死人    时间: 2015-2-1 19:50
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
作者: 若天明    时间: 2015-2-6 16:09
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
作者: 深爱那片海    时间: 2015-2-28 06:06
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
作者: 飘灵儿    时间: 2015-3-9 21:24
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
作者: 飘飘悠悠    时间: 2015-3-17 01:11
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
作者: 小妖女    时间: 2015-3-23 12:01
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2