JAVA写的简单UBB类
最近做论坛碰到了UBB的问题,这个很大众化的东西,怎么没有JAVA写的解释器呢,实在是该写一个。下面的这个不全,但是可以应付一下。
import java.util.*;
public class HTMLString{
public HTMLString(){}
public static String htmlEntities(String str){
return UBB(str);
}
public static boolean hasSpecialCharacter(String str){
/*用于合法性检查
if(str.indexOf(\"//\")!=-1){
return false;
}
if(str.indexOf(\"\'\")!=-1){
return false;
}
if(str.indexOf(\'\"\')!=-1){
return false;
}
if(str.indexOf(\"<\")!=-1){
return false;
}
if(str.indexOf(\">\")!=-1){
return false;
}
*/
return true;
}
public static String UBB(String fString){
return (ChkString(FormatStr(fString)));
}
//屏蔽HTML代码,并处理回车和换行
public static String FormatStr(String fString){
/*
fString = repstr(fString, \"‘\",\"\'\");
fString = repstr(fString, \"/\"\",\"“\");
fString = repstr(fString, \"<\",\"<\");
fString = repstr(fString, \"<\",\"<\");
fString = repstr(fString, \">\",\">\");
fString = repstr(fString, \" \",\"/r\");
*/
fString = repstr(fString, \"´\",\"\'\");
fString = repstr(fString, \""\",\"/\"\");
fString = repstr(fString, \"<\",\"<\");
fString = repstr(fString, \">\",\">\");
fString = repstr(fString, \" \",\" \");
fString = repstr(fString, \" \",\"/r\");
return (fString);
}
//把UBB代码转换成HTML代码以便正常显示
public static String ChkString(String fString){
fString = fString.trim();
if (fString.equals(\"\"))
fString = \" \";
else{
fString = doCode(fString, \"<B>\", \"</B>\",\"<b>\",\"</b>\");
fString = doCode(fString, \"<u>\", \"</u>\", \"<u>\", \"</u>\");
fString = doCode(fString, \"<I>\", \"</I>\", \"<i>\", \"</i>\");
fString = doCode(fString, \"[red]\", \"[/red]\", \"<font color=red>\", \"</font id=red>\");
fString = doCode(fString, \"[green]\", \"[/green]\", \"<font color=green>\", \"</font id=green>\");
fString = doCode(fString, \"[blue]\", \"[/blue]\", \"<font color=blue>\", \"</font id=blue>\");
fString = doCode(fString, \"[white]\", \"[/white]\", \"<font color=white>\", \"</font id=white>\");
fString = doCode(fString, \"[purple]\", \"[/purple]\", \"<font color=purple>\", \"</font id=purple>\");
fString = doCode(fString, \"[yellow]\", \"[/yellow]\", \"<font color=yellow>\", \"</font id=yellow>\");
fString = doCode(fString, \"[violet]\", \"[/violet]\", \"<font color=violet>\", \"</font id=violet>\");
fString = doCode(fString, \"[brown]\", \"[/brown]\", \"<font color=brown>\", \"</font id=brown>\");
fString = doCode(fString, \"[black]\", \"[/black]\", \"<font color=black>\", \"</font id=black>\");
fString = doCode(fString, \"[pink]\", \"[/pink]\", \"<font color=pink>\", \"</font id=pink>\");
fString = doCode(fString, \"[orange]\", \"[/orange]\", \"<font color=orange>\", \"</font id=orange>\");
fString = doCode(fString, \"[gold]\", \"[/gold]\", \"<font color=gold>\", \"</font id=gold>\");
fString = doCode(fString, \"<h1>\", \"</h1>\", \"<h1>\", \"</h1>\");
fString = doCode(fString, \"<h2>\", \"</h2>\", \"<h2>\", \"</h2>\");
fString = doCode(fString, \"<h3>\", \"</h3>\", \"<h3>\", \"</h3>\");
fString = doCode(fString, \"<h4>\", \"</h4>\", \"<h4>\", \"</h4>\");
fString = doCode(fString, \"<h5>\", \"</h5>\", \"<h5>\", \"</h5>\");
fString = doCode(fString, \"<h6>\", \"</h6>\", \"<h6>\", \"</h6>\");
fString = doCode(fString, \"[size=1]\", \"[/size=1]\", \"<font size=1>\", \"</font id=size1>\");
fString = doCode(fString, \"[size=2]\", \"[/size=2]\", \"<font size=2>\", \"</font id=size2>\");
fString = doCode(fString, \"[size=3]\", \"[/size=3]\", \"<font size=3>\", \"</font id=size3>\");
fString = doCode(fString, \"[size=4]\", \"[/size=4]\", \"<font size=4>\", \"</font id=size4>\");
fString = doCode(fString, \"[size=5]\", \"[/size=5]\", \"<font size=5>\", \"</font id=size5>\");
fString = doCode(fString, \"[size=6]\", \"[/size=6]\", \"<font size=6>\", \"</font id=size6>\");
fString = doCode(fString, \"[left]\", \"[/left]\", \"<div align=left>\", \"</div id=left>\");
fString = doCode(fString, \"<center>\", \"</center>\", \"<center>\", \"</center>\");
fString = doCode(fString, \"<div align=right>\", \"</div>\", \"<div align=right>\", \"</div id=right>\");
fString = doCode(fString, \"<pre class=CodeSamp>\", \"</pre>\", \"<pre id=code><font face=courier size=3 id=code>\", \"</font id=code></pre id=code>\");
fString = doCode(fString, \"[url]\", \"[/url]\", \"<a>\", \"</a>\");
fString = addlink(fString);
fString = addBr(fString);
}
return (fString);
}
//方便的替换函数
public static String doCode(String fString,String fOTag, String fCTag, String fROTag, String fRCTag){
fString = repstr(fString, fROTag, fOTag);
fString = repstr(fString, fRCTag, fCTag);
return (fString);
}
//处理链接
public static String addlink(String str){
String hrefTagPre = \"<a>\";
String hrefTagLast = \"</a>\";
String hrefTxt = \"\";
String strReturn = \"\";
int iSearchedFrom = 0 ;
int first = 0;
int last = 0;
while (( iSearchedFrom=str.indexOf( hrefTagPre , iSearchedFrom) ) != -1 ){
first = iSearchedFrom + 3;
if (( iSearchedFrom=str.indexOf( hrefTagLast , iSearchedFrom) ) != -1 ) {
last = iSearchedFrom;
iSearchedFrom += 4;
strReturn = str.substring( first, last);
if (strReturn.indexOf( \"<a>\", 0) != -1){
strReturn = repstr ( strReturn , \"\", \"<a>\");
}
hrefTxt = \"<a href =\" +strReturn + \" target=/\"_blank/\">\" + strReturn + \"</a>\";
strReturn = str.substring( first - 3 , iSearchedFrom);
str = repstr(str, hrefTxt ,strReturn );
iSearchedFrom =0;
}else
break;
}
return (str);
}
public static String fd(String str){
String fd=repstr(str,\"\'\'\",\"\'\");
return fd;
}
public static String repstr(String str, String strDen, String strSrc){
int iLen = str.length();
int iDenLen = strDen.length();
int iSrcLen = strSrc.length();
String strReturn = \"\";
int iSearchedFrom = 0 ;
int iPrevSearchedFrom = 0;
while ( (iSearchedFrom = str.indexOf(strSrc , iSearchedFrom)) != -1 ){
strReturn += str.substring(iPrevSearchedFrom, iSearchedFrom);
strReturn += strDen;
iSearchedFrom += iSrcLen;
iPrevSearchedFrom = iSearchedFrom;
}
if ( iPrevSearchedFrom !=0 )
strReturn += str.substring( str.lastIndexOf(strSrc) + iSrcLen , str.length());
else
strReturn = str;
return(strReturn);
}
public static String RemoveComment(String Content) {
String makeContent=new String();
StringTokenizer strToken=new StringTokenizer(Content,\"/n\");
String tempToken=null;
while(strToken.hasMoreTokens()) {
tempToken=strToken.nextToken();
if(tempToken.indexOf(\":\")!=0)
makeContent=makeContent+tempToken+\"/n\";
}
return makeContent;
}
public static String addBr(String Content) {
String makeContent=new String();
StringTokenizer strToken=new StringTokenizer(Content,\"/n\");
while(strToken.hasMoreTokens()){
String sNext = strToken.nextToken();
makeContent=makeContent + sNext.substring(0,sNext.length()-1) + \"<br>\";
}
return makeContent;
}
public static String delBr(String Content) {
String makeContent=new String();
StringTokenizer strToken=new StringTokenizer(Content,\"<br>\");
while(strToken.hasMoreTokens()) {
String sNext = strToken.nextToken();
makeContent=makeContent + sNext.substring(0,sNext.length()-4) + \"/n\";
}
return makeContent;
}
}