控制类:
WAP_PageStructure类为我们进行单条数据操作带来了方便,但是如果我们需要取得一个列表进行维护时,单靠这个类我们就无能为力了,因此我们创建了WAPSrv类,为我们进行其他一些操作提供方法。
package
com.data.srv;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.sql.DataSource;
import com.data.bean.WAP_PageStructure;
import com.util.db.DBService;
/** */ /**
* @author mayonglian
*
*/
public class WAPSrv ... {
/** *//**
* 得到所有WAP页面组成List:WAP_PageStructure
* @param dataSource
* @return 存放WAP_PageStructure对象的ArrayList
* @throws SQLException
*/
public static ArrayList getWAPPageList(DataSource dataSource) throws SQLException ...{
ArrayList list = new ArrayList();
DBService dbService = new DBService(dataSource);
try ...{
String sql = "SELECT ID FROM WAP_PageStructure";
dbService.prepareStatement(sql);
dbService.executeQuery();
int id = 0;
WAP_PageStructure page = null;
while (dbService.next()) ...{
id = dbService.getInt("ID");
page = new WAP_PageStructure(dataSource, id);
page.checkExisted();
list.add(page);
}
} finally ...{
dbService.close();
}
return list;
}
/** *//**
* 得到是否为主页面组成的List:WAP_PageStructure
* @param dataSource
* @param isMain
* @return 存放WAP_PageStructure对象的ArrayList
* @throws SQLException
*/
public static ArrayList getWAPPageListByIsMain(DataSource dataSource, boolean isMain) throws SQLException ...{
ArrayList list = new ArrayList();
DBService dbService = new DBService(dataSource);
try ...{
String qStr = "SELECT ID FROM WAP_PageStructure WHERE IsMain = ?";
PreparedStatement pStmt = dbService.prepareStatement(qStr);
pStmt.setBoolean(1, isMain);
dbService.executeQuery();
int id = 0;
WAP_PageStructure page = null;
while (dbService.next()) ...{
id = dbService.getInt("ID");
page = new WAP_PageStructure(dataSource, id);
page.checkExisted();
list.add(page);
}
} finally ...{
dbService.close();
}
return list;
}
/** *//**
* 得到类型相同的List:WAP_PageStructure
* @param dataSource
* @param type
* @return 存放WAP_PageStructure对象的ArrayList
* @throws SQLException
*/
public static ArrayList getWAPPageListByType(DataSource dataSource, int type) throws SQLException ...{
ArrayList list = new ArrayList();
DBService dbService = new DBService(dataSource);
try ...{
String qStr = "SELECT ID FROM WAP_PageStructure WHERE Type = ?";
PreparedStatement pStmt = dbService.prepareStatement(qStr);
pStmt.setInt(1, type);
dbService.executeQuery();
int id = 0;
WAP_PageStructure page = null;
while (dbService.next()) ...{
id = dbService.getInt("ID");
page = new WAP_PageStructure(dataSource, id);
page.checkExisted();
list.add(page);
}
} finally ...{
dbService.close();
}
return list;
}
/** *//**
* 得到子页面组成的List:WAP_PageStructure
* @param dataSource
* @param parentPage
* @return 存放WAP_PageStructure对象的ArrayList
* @throws SQLException
*/
public static ArrayList getWAPPageListByParentPage(DataSource dataSource, int parentPage) throws SQLException ...{
ArrayList list = new ArrayList();
DBService dbService = new DBService(dataSource);
try ...{
String qStr = "SELECT ID FROM WAP_PageStructure WHERE ParentPage = ?";
PreparedStatement pStmt = dbService.prepareStatement(qStr);
pStmt.setInt(1, parentPage);
dbService.executeQuery();
int id = 0;
WAP_PageStructure page = null;
while (dbService.next()) ...{
id = dbService.getInt("ID");
page = new WAP_PageStructure(dataSource, id);
page.checkExisted();
list.add(page);
}
} finally ...{
dbService.close();
}
return list;
}
/** *//**
* 得到主页面相同的List:WAP_PageStructure
* @param dataSource
* @param mainPage
* @return 存放WAP_PageStructure对象的ArrayList
* @throws SQLException
*/
public static ArrayList getWAPPageListByMainPage(DataSource dataSource, int mainPage) throws SQLException ...{
ArrayList list = new ArrayList();
DBService dbService = new DBService(dataSource);
try ...{
String qStr = "SELECT ID FROM WAP_PageStructure WHERE MainPage = ?";
PreparedStatement pStmt = dbService.prepareStatement(qStr);
pStmt.setInt(1, mainPage);
dbService.executeQuery();
int id = 0;
WAP_PageStructure page = null;
while (dbService.next()) ...{
id = dbService.getInt("ID");
page = new WAP_PageStructure(dataSource, id);
page.checkExisted();
list.add(page);
}
} finally ...{
dbService.close();
}
return list;
}
/** *//**
* @param dataSource
* @param mainPageID
* @param path
* @throws SQLException
* @throws IOException
*/
public static void createSinglePage(DataSource dataSource, int mainPageID, String path) throws SQLException, IOException ...{
ArrayList pageList = getWAPPageListByMainPage(dataSource, mainPageID);
WAP_PageStructure mainPage = new WAP_PageStructure(dataSource, mainPageID);
mainPage.checkExisted();
StringBuffer sb = new StringBuffer();
sb.append("<?xml version="1.0" encoding="utf-8" ?>").append(" ");
sb.append(
"<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">"
).append(" ");
sb.append("<wml>").append(" ");
sb.append("<head>").append(" ");
sb.append("<meta http-equiv="Cache-Control" content="max-age=0"/>").append(" ");
sb.append("</head>").append(" ");
sb.append(createCard(dataSource, mainPage, "#"));
for (int i=0; i<pageList.size(); i++) ...{
WAP_PageStructure temPage = (WAP_PageStructure)pageList.get(i);
sb.append(createCard(dataSource, temPage, "#"));
}
// 生成文件
String fileName = path + mainPage.getURL() + ".wml";
createFile(fileName, sb);
}
private static String createCard(DataSource dataSource, WAP_PageStructure page, String sign) throws SQLException ...{
StringBuffer sb = new StringBuffer();
String postfix = (sign.equals("#")) ? "" : ".wml";
sb.append("<card newcontext="false" ordered="true" id="").append(page.getURL()).append(
"" title="").append(page.getName()).append("">").append(" ");
String topMsg = "顶部图片";
String topImage = "<img alt=""+ topMsg
+"" src="120_20.gif" vspace="0" hspace="0" width="120" height="20" align="bottom"/>";
String laciness =
"<img alt="*" src="15_15.gif" vspace="0" hspace="0" width="15" height="15" align="bottom"/>";
// 如果是主页面,则显示logo
if (page.isMain()) ...{
sb.append("<p align="center" mode="nowrap">").append(" ");
sb.append(topImage).append(" ");
sb.append("<br/>").append(" ");
sb.append("</p>").append(" ");
}
// 内容类型为列表
if (page.getType()==1) ...{
ArrayList pageList = getWAPPageListByParentPage(dataSource, page.getID());
for (int i=0; i<pageList.size(); i++) ...{
sb.append("<p align="center" mode="nowrap">");
WAP_PageStructure temPage = (WAP_PageStructure)pageList.get(i);
switch (temPage.getShowType()) ...{
case 1:
sb.append(laciness).append(" ");
sb.append("<a href="").append(sign).append(temPage.getURL()).append(postfix).append(
"">").append(listNameFormat(temPage.getName(), 2)).append("</a>").append(" ");
sb.append(laciness).append(" ");break;
case 2:
sb.append(laciness).append(" ");
sb.append("<a href="").append(sign).append(temPage.getURL()).append(postfix).append(
"">").append(listNameFormat(temPage.getName(), 1)).append("</a>").append(" ");
break;
case 3:
sb.append("<a href="").append(sign).append(temPage.getURL()).append(postfix).append(
"">").append(listNameFormat(temPage.getName(), 1)).append("</a>").append(" ");
sb.append(laciness).append(" ");break;
case 4:
sb.append("<a href="").append(sign).append(temPage.getURL()).append(postfix).append(
"">").append(listNameFormat(temPage.getName(), 0)).append("</a>").append(" ");
break;
}
sb.append("</p>").append(" ");
}
} else if (page.getType()==2) ...{
sb.append("<p align="left" mode="nowrap">");
sb.append(contentFormat(page.getContent())).append(" ");
sb.append("</p>").append(" ");
}
sb.append("<br/>").append(" ");
if (page.getParentPage()!=0) ...{
String goBack = "返回上一页";
sb.append("<a href="").append(sign).append(page.getParentURL()).append(postfix).append("">").append(
goBack).append("</a> ");
}
sb.append("</card>").append(" ");
return sb.toString();
}
/** *//**
* @param dataSource
* @param mainPageID
* @throws SQLException
* @throws IOException
*/
public static void createMultiPage(DataSource dataSource, int mainPageID, String path) throws SQLException, IOException ...{
ArrayList pageList = getWAPPageListByMainPage(dataSource, mainPageID);
WAP_PageStructure mainPage = new WAP_PageStructure(dataSource, mainPageID);
mainPage.checkExisted();
StringBuffer sbHead = new StringBuffer();
StringBuffer sb = new StringBuffer();
sbHead.append("<?xml version="1.0" encoding="utf-8" ?>").append(" ");
sbHead.append("<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">").append(" ");
sbHead.append("<wml>").append(" ");
sbHead.append("<head>").append(" ");
sbHead.append("<meta http-equiv="Cache-Control" content="max-age=0"/>").append(" ");
sbHead.append("</head>").append(" ");
sb.append(sbHead).append(createCard(dataSource, mainPage, ""));
String fileName = path + mainPage.getURL() + ".wml";
createFile(fileName, sb);
for (int i=0; i<pageList.size(); i++) ...{
WAP_PageStructure temPage = (WAP_PageStructure)pageList.get(i);
StringBuffer strBuf = new StringBuffer();
strBuf.append(sbHead).append(createCard(dataSource, temPage, ""));
fileName = path + temPage.getURL() + ".wml";
createFile(fileName, strBuf);
}
}
/** *//**
* @param fileName
* @param sb
* @throws IOException
*/
public static void createFile(String fileName, StringBuffer sb) throws IOException ...{
// 生成文件
File file = new File(fileName);
if (!file.exists()) ...{
file.createNewFile();
}
FileOutputStream out = new FileOutputStream(file, false);
out.write(sb.toString().getBytes("utf-8"));
out.close();
}
/** *//**
* @param content
* @return 格式化后的String
*/
public static String contentFormat(String content) ...{
String lineSign = "<br/>";
StringBuffer sbOfOut = new StringBuffer();
String[] newContents = content.split(" ");
for (int i=0; i<newContents.length; i++) ...{
sbOfOut.append(" ").append(newContents[i]).append(lineSign);
}
return sbOfOut.toString();
}
/** *//**
* @param name
* @param photoSize
* @return 格式化后的String
*/
public static String listNameFormat(String name, int photoSize) ...{
String spaceSign = " ";
StringBuffer sbOfOut = new StringBuffer();
int length = WAP_PageStructure.LENGTH_NAME - photoSize;
length -= name.length();
sbOfOut.append(name);
for (int i=0; i<length; i++) ...{
sbOfOut.append(spaceSign);
}
return sbOfOut.toString();
}
}
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.sql.DataSource;
import com.data.bean.WAP_PageStructure;
import com.util.db.DBService;
/** */ /**
* @author mayonglian
*
*/
public class WAPSrv ... {
/** *//**
* 得到所有WAP页面组成List:WAP_PageStructure
* @param dataSource
* @return 存放WAP_PageStructure对象的ArrayList
* @throws SQLException
*/
public static ArrayList getWAPPageList(DataSource dataSource) throws SQLException ...{
ArrayList list = new ArrayList();
DBService dbService = new DBService(dataSource);
try ...{
String sql = "SELECT ID FROM WAP_PageStructure";
dbService.prepareStatement(sql);
dbService.executeQuery();
int id = 0;
WAP_PageStructure page = null;
while (dbService.next()) ...{
id = dbService.getInt("ID");
page = new WAP_PageStructure(dataSource, id);
page.checkExisted();
list.add(page);
}
} finally ...{
dbService.close();
}
return list;
}
/** *//**
* 得到是否为主页面组成的List:WAP_PageStructure
* @param dataSource
* @param isMain
* @return 存放WAP_PageStructure对象的ArrayList
* @throws SQLException
*/
public static ArrayList getWAPPageListByIsMain(DataSource dataSource, boolean isMain) throws SQLException ...{
ArrayList list = new ArrayList();
DBService dbService = new DBService(dataSource);
try ...{
String qStr = "SELECT ID FROM WAP_PageStructure WHERE IsMain = ?";
PreparedStatement pStmt = dbService.prepareStatement(qStr);
pStmt.setBoolean(1, isMain);
dbService.executeQuery();
int id = 0;
WAP_PageStructure page = null;
while (dbService.next()) ...{
id = dbService.getInt("ID");
page = new WAP_PageStructure(dataSource, id);
page.checkExisted();
list.add(page);
}
} finally ...{
dbService.close();
}
return list;
}
/** *//**
* 得到类型相同的List:WAP_PageStructure
* @param dataSource
* @param type
* @return 存放WAP_PageStructure对象的ArrayList
* @throws SQLException
*/
public static ArrayList getWAPPageListByType(DataSource dataSource, int type) throws SQLException ...{
ArrayList list = new ArrayList();
DBService dbService = new DBService(dataSource);
try ...{
String qStr = "SELECT ID FROM WAP_PageStructure WHERE Type = ?";
PreparedStatement pStmt = dbService.prepareStatement(qStr);
pStmt.setInt(1, type);
dbService.executeQuery();
int id = 0;
WAP_PageStructure page = null;
while (dbService.next()) ...{
id = dbService.getInt("ID");
page = new WAP_PageStructure(dataSource, id);
page.checkExisted();
list.add(page);
}
} finally ...{
dbService.close();
}
return list;
}
/** *//**
* 得到子页面组成的List:WAP_PageStructure
* @param dataSource
* @param parentPage
* @return 存放WAP_PageStructure对象的ArrayList
* @throws SQLException
*/
public static ArrayList getWAPPageListByParentPage(DataSource dataSource, int parentPage) throws SQLException ...{
ArrayList list = new ArrayList();
DBService dbService = new DBService(dataSource);
try ...{
String qStr = "SELECT ID FROM WAP_PageStructure WHERE ParentPage = ?";
PreparedStatement pStmt = dbService.prepareStatement(qStr);
pStmt.setInt(1, parentPage);
dbService.executeQuery();
int id = 0;
WAP_PageStructure page = null;
while (dbService.next()) ...{
id = dbService.getInt("ID");
page = new WAP_PageStructure(dataSource, id);
page.checkExisted();
list.add(page);
}
} finally ...{
dbService.close();
}
return list;
}
/** *//**
* 得到主页面相同的List:WAP_PageStructure
* @param dataSource
* @param mainPage
* @return 存放WAP_PageStructure对象的ArrayList
* @throws SQLException
*/
public static ArrayList getWAPPageListByMainPage(DataSource dataSource, int mainPage) throws SQLException ...{
ArrayList list = new ArrayList();
DBService dbService = new DBService(dataSource);
try ...{
String qStr = "SELECT ID FROM WAP_PageStructure WHERE MainPage = ?";
PreparedStatement pStmt = dbService.prepareStatement(qStr);
pStmt.setInt(1, mainPage);
dbService.executeQuery();
int id = 0;
WAP_PageStructure page = null;
while (dbService.next()) ...{
id = dbService.getInt("ID");
page = new WAP_PageStructure(dataSource, id);
page.checkExisted();
list.add(page);
}
} finally ...{
dbService.close();
}
return list;
}
/** *//**
* @param dataSource
* @param mainPageID
* @param path
* @throws SQLException
* @throws IOException
*/
public static void createSinglePage(DataSource dataSource, int mainPageID, String path) throws SQLException, IOException ...{
ArrayList pageList = getWAPPageListByMainPage(dataSource, mainPageID);
WAP_PageStructure mainPage = new WAP_PageStructure(dataSource, mainPageID);
mainPage.checkExisted();
StringBuffer sb = new StringBuffer();
sb.append("<?xml version="1.0" encoding="utf-8" ?>").append(" ");
sb.append(
"<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">"
).append(" ");
sb.append("<wml>").append(" ");
sb.append("<head>").append(" ");
sb.append("<meta http-equiv="Cache-Control" content="max-age=0"/>").append(" ");
sb.append("</head>").append(" ");
sb.append(createCard(dataSource, mainPage, "#"));
for (int i=0; i<pageList.size(); i++) ...{
WAP_PageStructure temPage = (WAP_PageStructure)pageList.get(i);
sb.append(createCard(dataSource, temPage, "#"));
}
// 生成文件
String fileName = path + mainPage.getURL() + ".wml";
createFile(fileName, sb);
}
private static String createCard(DataSource dataSource, WAP_PageStructure page, String sign) throws SQLException ...{
StringBuffer sb = new StringBuffer();
String postfix = (sign.equals("#")) ? "" : ".wml";
sb.append("<card newcontext="false" ordered="true" id="").append(page.getURL()).append(
"" title="").append(page.getName()).append("">").append(" ");
String topMsg = "顶部图片";
String topImage = "<img alt=""+ topMsg
+"" src="120_20.gif" vspace="0" hspace="0" width="120" height="20" align="bottom"/>";
String laciness =
"<img alt="*" src="15_15.gif" vspace="0" hspace="0" width="15" height="15" align="bottom"/>";
// 如果是主页面,则显示logo
if (page.isMain()) ...{
sb.append("<p align="center" mode="nowrap">").append(" ");
sb.append(topImage).append(" ");
sb.append("<br/>").append(" ");
sb.append("</p>").append(" ");
}
// 内容类型为列表
if (page.getType()==1) ...{
ArrayList pageList = getWAPPageListByParentPage(dataSource, page.getID());
for (int i=0; i<pageList.size(); i++) ...{
sb.append("<p align="center" mode="nowrap">");
WAP_PageStructure temPage = (WAP_PageStructure)pageList.get(i);
switch (temPage.getShowType()) ...{
case 1:
sb.append(laciness).append(" ");
sb.append("<a href="").append(sign).append(temPage.getURL()).append(postfix).append(
"">").append(listNameFormat(temPage.getName(), 2)).append("</a>").append(" ");
sb.append(laciness).append(" ");break;
case 2:
sb.append(laciness).append(" ");
sb.append("<a href="").append(sign).append(temPage.getURL()).append(postfix).append(
"">").append(listNameFormat(temPage.getName(), 1)).append("</a>").append(" ");
break;
case 3:
sb.append("<a href="").append(sign).append(temPage.getURL()).append(postfix).append(
"">").append(listNameFormat(temPage.getName(), 1)).append("</a>").append(" ");
sb.append(laciness).append(" ");break;
case 4:
sb.append("<a href="").append(sign).append(temPage.getURL()).append(postfix).append(
"">").append(listNameFormat(temPage.getName(), 0)).append("</a>").append(" ");
break;
}
sb.append("</p>").append(" ");
}
} else if (page.getType()==2) ...{
sb.append("<p align="left" mode="nowrap">");
sb.append(contentFormat(page.getContent())).append(" ");
sb.append("</p>").append(" ");
}
sb.append("<br/>").append(" ");
if (page.getParentPage()!=0) ...{
String goBack = "返回上一页";
sb.append("<a href="").append(sign).append(page.getParentURL()).append(postfix).append("">").append(
goBack).append("</a> ");
}
sb.append("</card>").append(" ");
return sb.toString();
}
/** *//**
* @param dataSource
* @param mainPageID
* @throws SQLException
* @throws IOException
*/
public static void createMultiPage(DataSource dataSource, int mainPageID, String path) throws SQLException, IOException ...{
ArrayList pageList = getWAPPageListByMainPage(dataSource, mainPageID);
WAP_PageStructure mainPage = new WAP_PageStructure(dataSource, mainPageID);
mainPage.checkExisted();
StringBuffer sbHead = new StringBuffer();
StringBuffer sb = new StringBuffer();
sbHead.append("<?xml version="1.0" encoding="utf-8" ?>").append(" ");
sbHead.append("<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">").append(" ");
sbHead.append("<wml>").append(" ");
sbHead.append("<head>").append(" ");
sbHead.append("<meta http-equiv="Cache-Control" content="max-age=0"/>").append(" ");
sbHead.append("</head>").append(" ");
sb.append(sbHead).append(createCard(dataSource, mainPage, ""));
String fileName = path + mainPage.getURL() + ".wml";
createFile(fileName, sb);
for (int i=0; i<pageList.size(); i++) ...{
WAP_PageStructure temPage = (WAP_PageStructure)pageList.get(i);
StringBuffer strBuf = new StringBuffer();
strBuf.append(sbHead).append(createCard(dataSource, temPage, ""));
fileName = path + temPage.getURL() + ".wml";
createFile(fileName, strBuf);
}
}
/** *//**
* @param fileName
* @param sb
* @throws IOException
*/
public static void createFile(String fileName, StringBuffer sb) throws IOException ...{
// 生成文件
File file = new File(fileName);
if (!file.exists()) ...{
file.createNewFile();
}
FileOutputStream out = new FileOutputStream(file, false);
out.write(sb.toString().getBytes("utf-8"));
out.close();
}
/** *//**
* @param content
* @return 格式化后的String
*/
public static String contentFormat(String content) ...{
String lineSign = "<br/>";
StringBuffer sbOfOut = new StringBuffer();
String[] newContents = content.split(" ");
for (int i=0; i<newContents.length; i++) ...{
sbOfOut.append(" ").append(newContents[i]).append(lineSign);
}
return sbOfOut.toString();
}
/** *//**
* @param name
* @param photoSize
* @return 格式化后的String
*/
public static String listNameFormat(String name, int photoSize) ...{
String spaceSign = " ";
StringBuffer sbOfOut = new StringBuffer();
int length = WAP_PageStructure.LENGTH_NAME - photoSize;
length -= name.length();
sbOfOut.append(name);
for (int i=0; i<length; i++) ...{
sbOfOut.append(spaceSign);
}
return sbOfOut.toString();
}
}
几个返回ArrayList类型的方法主要用于页面上的各种选择列表,这样就可以动态加载列表数据。由于WML使用无线上网机制,所以页面尽可能的不要太大,为此我们提供了两个方法生成文件,当文件组较小时,我们推荐使用createSinglePage(DataSource, int, String)方法,如果页面比较大我们推荐使用createMultiPage(DataSource, int, String)方法,生成多个文件。因为这两个方法的区别,在createCard(DataSource, WAP_PageStructure, String)方法中我们加入了前缀和后缀,以保证链接的正确。
为了保证方法的效率我们使用StringBuffer提高字符串,文件生成时,我们采用的是FileOutputStream。
说明:
在Windows平台时这个类不需要做任何改变,如果是别的平台,我们建议将其中的"顶部图片"和"返回上一页"两处中文文字,先转换成Unicode格式,然后再读取,以免出现乱码。
中文转换成Unicode方法如下:
public
static
String toUnicode(String src)
...
{
// set up a StringBuffer with capacity of 6 * length of src
StringBuffer sb = new StringBuffer(src.length()*6);
for (int i = 0; i < src.length(); i++) ...{
char c = src.charAt(i);
if (c < 0xff)
sb.append(c);
else
sb.append("/u" + Integer.toHexString((int) c));
}
return sb.toString();
}
// set up a StringBuffer with capacity of 6 * length of src
StringBuffer sb = new StringBuffer(src.length()*6);
for (int i = 0; i < src.length(); i++) ...{
char c = src.charAt(i);
if (c < 0xff)
sb.append(c);
else
sb.append("/u" + Integer.toHexString((int) c));
}
return sb.toString();
}
public
static
String fromUnicode(String src)
...
{
StringBuffer sb = new StringBuffer(src.length());
for (int i = 0; i < src.length(); i++) ...{
char c = src.charAt(i);
if (c == '/' && src.charAt(i + 1) == 'u') ...{
String ustr = src.substring(i + 2, i + 6);
char uc = (char) Integer.parseInt(ustr, 16);
sb.append(uc);
i += 5;
} else
sb.append(c);
}
return sb.toString();
}
StringBuffer sb = new StringBuffer(src.length());
for (int i = 0; i < src.length(); i++) ...{
char c = src.charAt(i);
if (c == '/' && src.charAt(i + 1) == 'u') ...{
String ustr = src.substring(i + 2, i + 6);
char uc = (char) Integer.parseInt(ustr, 16);
sb.append(uc);
i += 5;
} else
sb.append(c);
}
return sb.toString();
}