Elaine_liya 2010-02-07 17:26
浏览 230
已采纳

html标签转换问题

输入一段html代码,转换html标签的时候能不能指定几个不转其他全转。
下边是我转换标签的方法。
public static void main(String[] argv) {
String test = "

8888qq
ya9999ngqiu
";

System.out.println(replaceTag(test));

}
/**  
 *   
 * 基本功能:替换标记以正常显示  
 * <p>  
 *   
 * @param input  
 * @return String  
 */  
public static String replaceTag(String input) {   
    if (!hasSpecialChars(input)) {   
        return input;   
    }   
    StringBuffer filtered = new StringBuffer(input.length());   
    char c;   
    for (int i = 0; i <= input.length() - 1; i++) {   
        c = input.charAt(i);   
        switch (c) {   
        case '<':   
            filtered.append("&lt;");   
            break;   
        case '>':   
            filtered.append("&gt;");   
            break;   
        case '"':   
            filtered.append("&quot;");   
            break;   
        case '&':   
            filtered.append("&amp;");   
            break;   
        default:   
            filtered.append(c);   
        }   

    }   
    return (filtered.toString());   
}   

/**  
 *   
 * 基本功能:判断标记是否存在  
 * <p>  
 *   
 * @param input  
 * @return boolean  
 */  
public static boolean hasSpecialChars(String input) {   
    boolean flag = false;   
    if ((input != null) && (input.length() > 0)) {   
        char c;   
        for (int i = 0; i <= input.length() - 1; i++) {   
            c = input.charAt(i);   
            switch (c) {   
            case '>':   
                flag = true;   
                break;   
            case '<':   
                flag = true;   
                break;   
            case '"':   
                flag = true;   
                break;   
            case '&':   
                flag = true;   
                break;   
            }   
        }   
    }   
    return flag;   
}   
这样做所有的标签都转换了,能不能转换的时候判断下,如果是sapn,p,br标签就不转了呢?
  • 写回答

2条回答 默认 最新

  • iteye_13500 2010-02-08 12:06
    关注

    我写过一个工具类,用来对文本分块的,其中涉及到切分 ... ,你可以参考,从实现方法上是类似的。

    [code="java"]public enum HTMLSplitor {
    Instance;

    private final static char[] startTag = new char[] { '<', 'a' };
    private final static char[] endTag = new char[] { '<', '/', 'a', '>' };
    
    private int getTagOpenedLoc(String htmlText, int start) {
        for (int i = start; i < htmlText.length(); i++) {
            if (htmlText.charAt(i) == startTag[0])
                return i;
        }
        return htmlText.length();
    }
    
    private int getCommonTagClosedLoc(String htmlText, int start) {
        for (int i = start; i < htmlText.length(); i++) {
            if (htmlText.charAt(i) == endTag[3])
                return i;
        }
        return htmlText.length();
    }
    
    private int getLinkTagClosedLoc(String htmlText, int start) {
        for (int i = start; i < htmlText.length() - 4; i++) {
            if ((htmlText.charAt(i) == endTag[0])
                    && (htmlText.charAt(i + 1) == endTag[1])
                    && (htmlText.charAt(i + 2) == endTag[2])
                    && (htmlText.charAt(i + 3) == endTag[3]))
                return i + 3;
        }
    
        return htmlText.length();
    }
    
    /*
     * Split the String to several Segment Each segment is a String which can be
     * used for match
     */
    public List<Segment> splitHTMLText(String htmlText) {
        List<Segment> segList = new ArrayList<Segment>();
        boolean tagOpened = false;
        int start = 0;
        int cursor = 0;
        while (true) {
    
            if (tagOpened) {
                if (htmlText.charAt(cursor) == startTag[1]) {
                    // In the tag <a
                    // cursor = get
                    cursor = getLinkTagClosedLoc(htmlText, cursor);
                } else {
                    // Just in the tag <
                    cursor = getCommonTagClosedLoc(htmlText, cursor);
    
                }
    
                if (cursor >= htmlText.length() - 1)
                    return segList;
    
                cursor++;
                start = cursor;
                tagOpened = false;
            } else {
                cursor = getTagOpenedLoc(htmlText, start);
                if (cursor > start + 1) {
                    Segment seg = new Segment(start, cursor - 1);
                    segList.add(seg);
                }
    
                if (cursor >= htmlText.length() - 1)
                    return segList;
    
                cursor++;
                tagOpened = true;
            }
        }
    }
    

    }[/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥40 图书信息管理系统程序编写
  • ¥15 7-1 jmu-java-m02-使用二维数组存储多元线性方程组
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
  • ¥15 前端echarts坐标轴问题
  • ¥15 ad5933的I2C
  • ¥15 请问RTX4060的笔记本电脑可以训练yolov5模型吗?
  • ¥15 数学建模求思路及代码
  • ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题