本人算法不好,外加java处理字符串方法不熟悉现在想自己定义一个标记解析器 比如
<ul>
{Tag:type=体育&pagesize=5}
</ul>
<ul>
{Tag:type=娱乐&pagesize=5}
</ul>
现在想做一个方法,来解析这个字符串,不要用正则,也不要用replace,通过计算"{Tag:", "}"位置来实现
如何实现?
<ul>
李宁冠军
李宁冠军
李宁冠军
李宁冠军
李宁冠军
</ul>
<ul>
刘德华演唱会
刘德华演唱会
刘德华演唱会
刘德华演唱会
刘德华演唱会
</ul>
<ul>
{Tag:type=体育&pagesize=5}
</ul>
<ul>
{Tag:type=娱乐&pagesize=5}
</ul>
现在想做一个方法,来解析这个字符串,不要用正则,也不要用replace,通过计算"{Tag:", "}"位置来实现
如何实现?
<ul>
李宁冠军
李宁冠军
李宁冠军
李宁冠军
李宁冠军
</ul>
<ul>
刘德华演唱会
刘德华演唱会
刘德华演唱会
刘德华演唱会
刘德华演唱会
</ul>
解析了,但就是写不对
String templeHtml = "lll[{cms:1}][{cms:2}]";
String htmlCode = "";
String beginTag = "{cms:";
String endTag = "}";
boolean isFind = false;
int myPos = 0;
int myPosE = 0;
int StartPos = 0; //'在循环中记录当前已经处理到的位置
String tagName = "";
while (!isFind) {
myPos = templeHtml.indexOf(beginTag,StartPos);
if (myPos ==-1 ) {
htmlCode += templeHtml.substring(StartPos);
isFind = true;
} else {
//如果找到了标记起点
//先将这个标记起点和上一个标记终点之间的代码保存到HtmlCode
htmlCode += templeHtml.substring(StartPos,myPos+StartPos);
myPosE = templeHtml.indexOf(endTag,myPos);
String ss = templeHtml.substring(myPosE);
StartPos = (myPosE+1);
}
}
请教各位高人
1. 创建*.tld标签描述符文件
描述性文件的作用是:(未知)
2. 创建*.java标签
3. Web.XML中加载标签描述符文件
4. Web下创建*.jsp页面总的来说,自定义标记是一个*.java文件,在jsp页面上使用像javaBean一样是通过*.tld来配制文件,设置一个<uri>.再在*.xml中调用*.jsp中引入调用这个<uri>来实现*.java里面的功能。
如下:未知1. 创建标签描述符文件在WEB-INF文件下创建*.tld标签描述符文件:
//下面的配制和javaBean有什么关系?
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>eRedLab JSPTag Library</shortname>
<uri>/testTag</uri>
<info>自定义标签测试</info>
<tag>
<name>hello</name>
<tagclass>tutorial.TestTld</tagclass>
<bodycontent>empty</bodycontent>
<info>自定义标签测试</info>
<attribute>
<name>begin</name>
<required>true</required>
</attribute>
<attribute>
<name>end</name>
<required>true</required>
</attribute>
</tag>
</taglib>2. 创建标签处理器在src下创建*.java标签:
package tutorial;import java.io.IOException;import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;/**
* @desc 自定义标签测试类 实现一个简单的Hello World标签
* @author null
* @version
*/
public class TestTld extends TagSupport{
//标签属性begin ,相当于html标记中的属性
private String begin = null;
//标签属性end ,相当于html标记中的属性
private String end = null;
//构造函数
public TestTld(){
}/* 标签初始方法 */
public int doStartTag() throws JspTagException{
return super.EVAL_BODY_INCLUDE;
}/* 标签结束方法 */
public int doEndTag() throws JspTagException{
JspWriter out = pageContext.getOut();
String sum = begin + end;
try{
//标签的返回值
out.println(sum);
}catch(IOException e){
e.printStackTrace();
}
return super.SKIP_BODY;
}/* 释放资源 */
public void release(){
super.release();
}
/********************************************
属性get()、set()方法
*******************************************/
public String getBegin() {
return begin;
}public void setBegin(String begin) {
this.begin = begin;
}public String getEnd() {
return end;
}public void setEnd(String end) {
this.end = end;
}
}
3. 使用自定义JSP标签
在Web.XML中加载标签描述符文件:
<!-- 加载标签描述符文件 -->
<jsp-config>
<taglib>
<taglib-uri>/testTag</taglib-uri>
<taglib-location>/WEB-INF/test.tld</taglib-location>
</taglib>
</jsp-config>
4. 在JSP中使用此标签
在Web下创建*.jsp页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib uri="/testTag" prefix="sun_1"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<sun_1:hello end="Hello World!" begin="自定义标签输出流:Hello,"/>
<sun_1:hello end="World!" begin="Hi,"/>
</body>
</html>
String templeHtml = "<ul>{Tag:type=体育&pagesize=5}</ul><ul>{Tag:type=娱乐&pagesize=5}</ul>";
String htmlCode = "";
String beginTag = "{Tag:";
String endTag = "}";
boolean isFind = false;
int myPos = 0;
int myPosE = 0;
int StartPos = 0; //'在循环中记录当前已经处理到的位置
String tagName = "";
while (!isFind) {
myPos = templeHtml.indexOf(beginTag,StartPos);
if (myPos ==-1 ) {
htmlCode += templeHtml.substring(StartPos);
isFind = true;
} else {
//如果找到了标记起点
//先将这个标记起点和上一个标记终点之间的代码保存到HtmlCode
htmlCode += templeHtml.substring(StartPos,myPos);
myPosE = templeHtml.indexOf(endTag,myPos);
tagName = templeHtml.substring(myPos+5, myPosE);
// tagName = templeHtml.substring(myPos, myPosE+1);
String[] arrayTagName = tagName.split("&");
String context = "";
for (int i = 0; i < arrayTagName.length;i++) {
String[] arrayArgs = arrayTagName[i].split("=");
String argsName = arrayArgs[0]; //参数名称
String argsValue = arrayArgs[1]; //参数值
if (argsName.equals("type")) {
if (argsValue.equals("体育"))
context = "<li>李宁冠军</li>";
else
context = "<li>刘德华演唱会</li>";
}
if (argsName.equals("pagesize")) {
for ( int k = 0; k < Integer.valueOf(argsValue); k++) {
htmlCode += context;
}
}
}
String ss = templeHtml.substring(myPosE);
StartPos = (myPosE+1);
}
System.out.println("---------->"+htmlCode);
}
}