现在我国的3g时代马上就要到来了,那就是意味着我们的手机和电脑完全是同出一辙了,理所当然,因特网上最聚人气的BBS将逐渐的向WAP转移。然而,如果能做到手机和电脑同时访问同样的资源,并且最大限度的减少差异,就是在电脑上能做的事情,在手机上也要能做。
最近,写了个论坛在手机上操作的东东。下面把本人认为最让人头痛的UBB处理代码和大家分享,希望大家提意见。。。
/**
* @author 李国庆
* @company leemenz (C) copyright
* @time 2006-9-11 11:36:18
* @version 1.0.0.0
* @package com.sqlmanage
*/
package com.sqlmanage;
import java.util.Vector;
/**
* @author Administrator
*
*/
/**
*
* 这个类提供实现对UBB代码的处理
* @author 李国庆
* @version 2006-08-19
*
*/
public class UBB {
/**
* 把一个帖子的内容转换成一个字符串数组,以便于分页显示。 根据length确定数组里每个字符串大约是多少个字符。
* 以一行为完整单位进行截取,避免将一行内容截取后分别放入两个字符串。 如果根据字数截取到
* 的某个字符串包含了某一行的部分内容,则把该行其余内容也截取到该字符串。 根据"<br/>"符号来判断行。
*
* @param content
* 帖子内容
* @param length
* 用来规定字符串数组里每个字符串大约的字符数
* @return 字符串数组。
*/
public static String[] contentToArray(String content, int length) {
StringBuffer sb = new StringBuffer(content);
Vector v = new Vector();
int index = 0; // 用来定位"<br"字符串的位置
while (sb.length() > 0) {
if (sb.length() <= length) {
v.addElement(sb.toString());
break;
// }else{
// v.addElement(sb.substring(0,length));
// sb.delete(0,length);
}
index = sb.indexOf("<br", length - 1); // 找到第length个字符后第一个"<br"符号的位置
if (index < 0) {
v.addElement(sb.toString());
break;
} else {
v.addElement(sb.substring(0, index));
sb.delete(0, index);
}
} // end while
String[] contents = new String[v.size()];
for (int i = 0; i < contents.length; i++) {
contents[i] = (String) v.get(i);
contents[i] = contents[i].replaceAll("<BR>", "<br/>");
}
return contents;
}
// UBB代码的处理
public static String ChkString(String fString) {
fString = FormatWapStr(fString);
fString = fString.replaceAll(".JPG", ".jpg");
fString = fString.replaceAll(".GIF", ".gif");
fString = fString.replaceAll(".PNG", ".png");
fString = dealOther2Ubb(fString, "[upload=bmp]", "[/upload]");
fString = dealOther2Ubb(fString, "[IMG]", ".bmp[/IMG]");
fString = dealOther2Ubb(fString, "[IMG]", ".BMP[/IMG]");
fString = doCode(fString, "[img]", "[/img]", "[IMG]", "[/IMG]");
fString = doCode(fString, "[b]", "[/b]", "[B]", "[/B]");
fString = doCode(fString, "[B]", "[/B]", "", "");
fString = doCode(fString, "[u]", "[/u]", "[U]", "[/U]");
fString = doCode(fString, "[U]", "[/U]", "", "");
fString = doCode(fString, "[i]", "[/i]", "[I]", "[/I]");
fString = doCode(fString, "[I]", "[/I]", "", "");
fString = doCode(fString, "[QUOTE]", "[/QUOTE]", "", "");
fString = doCode(fString, "[quote]", "[/quote]", "", "");
fString = doCode(fString, "[fly]", "[/fly]", "", "");
fString = doCode(fString, "[move]", "[/move]", "", "");
fString = dealOtherUbb(fString, "[face", "]");
fString = dealOtherUbb(fString, "[align", "]");
fString = dealOtherUbb(fString, "[color", "]");
fString = dealOtherUbb(fString, "[glow", "]");
fString = dealOtherUbb(fString, "[em", "]");
fString = dealOther2Ubb(fString, "[newem", "]");
fString = dealOther2Ubb(fString, "[URL", "[/URL]");
fString = dealOther2Ubb(fString, "[EMAIL]", "[/EMAIL]");
fString = dealOther2Ubb(fString, "[flash", "[/flash]");
fString = dealOther2Ubb(fString, "[dir", "[/dir]");
fString = dealOther2Ubb(fString, "[newem", "[/dir]");
fString = dealOther2Ubb(fString, "[rm", "[/rm]");
fString = dealOther2Ubb(fString, "[mp", "[/mp]");
fString = dealOther2Ubb(fString, "[qt", "[/qt]");
fString = dealOther2Ubb(fString, "[SOUND]", "[/SOUND]");
fString = repstr(fString, "", "[/face]");
fString = repstr(fString, "", "[/color]");
fString = repstr(fString, "", "[/glow]");
fString = repstr(fString, "", "[/align]");
fString = doCode(fString, "[size=2]", "[/size]", "", "");
fString = doCode(fString, "[size=3]", "[/size]", "", "");
fString = doCode(fString, "[size=4]", "[/size]", "", "");
fString = doCode(fString, "[center]", "[/center]", "", "");
fString = doUploadUBB(fString,"[upload=gif]","[/upload]");
fString = doUploadUBB(fString,"[upload=jpg]","[/upload]");
return (fString);
}
// 转换函数
private 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);
}
// 字符串取替换
private static String repstr(String str, String strDen, String strSrc) {
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);
}
// 屏蔽wml代码,并处理回车和换行
private static String FormatWapStr(String fString) {
fString = repstr(fString, "&", "&");
// fString = repstr(fString, " ", " ");
fString = fString.replaceAll("<", "");
fString = fString.replaceAll(">", "");
fString = fString.replaceAll("<br>", "");
fString = fString.replaceAll("</br>", "");
fString = repstr(fString, "<br/>", "\r\n");
return (fString);
}
// 对其他UBB进行处理
private static String dealOtherUbb(String str, String TagPre, String TagLast) {
String hrefTagPre = TagPre;
String hrefTagLast = TagLast;
String strReturn = "";
int iSearchedFrom = 0;
int first = 0;
int last = 0;
while ((iSearchedFrom = str.indexOf(hrefTagPre, iSearchedFrom)) != -1) {
first = iSearchedFrom;
if ((iSearchedFrom = str.indexOf(hrefTagLast, iSearchedFrom)) != -1) {
last = iSearchedFrom + 1;
strReturn = str.substring(first, last);
str = repstr(str, "", strReturn);
} else
break;
}
return (str);
}
// 对其他UBB(不同于上面的方法)进行处理
private static String dealOther2Ubb(String str, String TagPre,
String TagLast) {
String hrefTagPre = TagPre;
String hrefTagLast = TagLast;
String strReturn = "";
int iSearchedFrom = 0;
int first = 0;
int last = 0;
while ((iSearchedFrom = str.indexOf(hrefTagPre, iSearchedFrom)) != -1) {
first = iSearchedFrom;
if ((iSearchedFrom = str.indexOf(hrefTagLast, iSearchedFrom)) != -1) {
last = iSearchedFrom;
iSearchedFrom += TagLast.length();
strReturn = str.substring(first, last);
strReturn = str.substring(first, iSearchedFrom);
str = repstr(str, "", strReturn);
iSearchedFrom = 0;
} else
break;
}
return (str);
}
// 根据一个图片文件的URL,得到对应的小图文件的URL
public static String getSmallFileURL(String url) {
String s = null;
int sign = url.lastIndexOf("/");
s = url.substring(0, sign + 1) + "small" + url.substring(sign + 1);
return s;
}
// ------------------------------------------------------------------------------
// MySql中不能识别的特殊字符处理
public static String featureStrDeal(String str) {
char pk = 58865;
str = str.replace(pk, '\n');
return str;
}
/**
* 根据时间戳得到日期。时间戳的格式:"2005-06-11 12:00:00.0"或者"2005-06-11 12:00:00"
*
* @param timestamp
* 时间戳
* @return 日期字符串。比如:"2005-06-11"。如果传入的参数格式不对,则将其原样返回
*/
public static String getDate(String timestamp) {
timestamp = timestamp.trim();
int index = timestamp.indexOf(' '); // 找到第一个空格的位置
if (index <= 0) {
return timestamp;
}
String date = timestamp.substring(0, index);
return date;
}
public static String doUploadUBB(String str, String TagPre, String TagLast){
String hrefTagPre = TagPre;
String hrefTagLast = TagLast;
String strReturn = "";
String result = str;
int iSearchedFrom = 0;
int first = 0;
int last = 0;
while ((iSearchedFrom = str.indexOf(hrefTagPre, iSearchedFrom)) != -1) {
first = iSearchedFrom;
if ((iSearchedFrom = str.indexOf(hrefTagLast, iSearchedFrom)) != -1) {
last = iSearchedFrom + 1;
strReturn = str.substring(first, last+8);
String url = str.substring(first+12,last-1);
result = result.replace(strReturn,"<a href='http://www.motong.net/sendMms.jsp?URL="+url+"' target='_blank' ><IMG SRC='"+url+"' ALT='单击图片发送到手机'/></a>");
} else
break;
}
return result;
}
// public static void main(String[] args) {
// String s = "[color=#9932CC][B]我也来热闹热闹[/B][/color][quote][b]以下是引用[i]管理员在2006-8-31 13:31:00[/i]的发言:[/b]眼神太好,已经找出,留给后面的朋友。[/quote][color=#FF69B4][B]还是马桶你来吧.......[newem2.21][newem2.14][/B][/color][upload=gif]http://img.hnol.net/img/2004-09-5/18/2004951828591070.gif[/upload]fdgdfgdfgdf[upload=gif]http://img.hnol.net/img/2004-09-5/18/2004951828594758678.gif[/upload]";
// System.out.println("result is :"+ChkString(s));
// }
}
评论