本人算法不好,外加java处理字符串方法不熟悉现在想自己定义一个标记解析器 比如
<ul>
{Tag:type=体育&pagesize=5}
</ul>
<ul>
{Tag:type=娱乐&pagesize=5}
</ul>
现在想做一个方法,来解析这个字符串,不要用正则,也不要用replace,通过计算"{Tag:", "}"位置来实现
如何实现?
<ul>
李宁冠军
李宁冠军
李宁冠军
李宁冠军
李宁冠军
</ul>
<ul>
刘德华演唱会
刘德华演唱会
刘德华演唱会
刘德华演唱会
刘德华演唱会
</ul>

解决方案 »

  1.   

    就是循环着把{Tag:type=体育&pagesize=5} 
    解析了,但就是写不对
    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); 
    }
    }
    请教各位高人
      

  2.   

    总共分四步:
    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> 
      

  3.   

    有点乱,这样试试
    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);
            }
    }