最近做论坛碰到了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; } } 
|