package dsa;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;/** 判断HTML文件中的标签匹配,使用栈,在终端中输入文件内容,按ctrl+z结束*/
public class Html {public static class Tag {String name;boolean opening;public Tag() {name = "";opening = false;}public Tag(String n, boolean type) {name = n;opening = type;}public boolean isOpening() {return opening;}public String getName() {return name;}}public void indent(int level) {// 匹配标记的层次,可能是多层嵌套for (int k = 0; k < level; k++)System.out.println("\t|");}public boolean isHtmlMatched(Tag[] tag) {// 检查每个起始标签是否对应一个结束标记int level = 0;Stack<String> s = new Stack<String>();for (int i = 0; (i < tag.length) && (tag[i] != null); i++) {if (tag[i].isOpening()) {s.push(tag[i].getName());indent(level++);System.out.println("\t" + tag[i].getName());} else {if (s.empty()) {return false;}if (!((String) s.pop()).equals(tag[i].getName()))return false;indent(--level);System.out.println("\t" + tag[i].getName());}}if (s.empty())return true;elsereturn false;}public final static int CAPACITY = 1000;// 从HTML文档中提取出标记,依次存入数组中public Tag[] parseHtml(BufferedReader r) throws IOException {String line;boolean inTag = false;// 是否扫描到标记Tag[] tag = new Tag[CAPACITY];int count = 0;while ((line = r.readLine()) != null) {StringTokenizer st = new StringTokenizer(line, "<> \t", true);while (st.hasMoreElements()) {String token = (String) st.nextToken();if (token.equals("<"))inTag = true;else if (token.equals(">"))inTag = false;else if (inTag) {if ((token.length() == 0) || (token.charAt(0) != '/'))tag[count++] = new Tag(token, true);elsetag[count++] = new Tag(token.substring(1), false);}}}return tag;}public static void main(String[] args) throws IOException {BufferedReader stdr = new BufferedReader(new InputStreamReader(System.in));// 标准输入Html tagChecker = new Html();if (tagChecker.isHtmlMatched(tagChecker.parseHtml(stdr)))System.out.println("该文件符合HTML标记匹配。");elseSystem.out.println("该文件不符合HTML标记匹配。");}
}
详细解决方案
HTML标签匹配,要点:Stack,StringTokenizer
热度:93 发布时间:2023-12-18 18:49:52.0
相关解决方案
- 访问Tomcat的url的时候如何自动调用index.html
- The requested resource (/webtest/servlet/hello.html) is not availabl 帮忙解决解决方法
- JSP 页面乱码 页面起首已设置 contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
- html js不运行有关问题
- 办公自动化系统——议程管理(用jsp+servlet+js+html+jdbc)怎样实现
- <html:text>property的有关问题
- 关于<html:text>相关的有关问题
- Struts 1.2 html:form的action和form的action区别,还有如果2个都有执行哪个解决方案
- 简单计算器(html+js),该怎么解决
- ValueStack 和 Stack Context 有什么区别和联系?该怎么处理
- HTML 小疑点,哪位高手解决 给哪位高手分
- 嵌入JSP中的CSS显示效果和在 HTML 中的不一样.为什么.该怎么解决
- struts1 中<html:checkbox>标签的value值怎么动态赋值
- ALERT: java/lang/ClassFormatError: Bad stack map是如何回事
- 新人求问,J2EE方向,html,css,javascript,vml要学到什么程度?解决思路
- :前台和后台开发有啥区别?还有css、html、ajax、js、jquery都有什么区别
- 这个是什么东东 Pool thread stack traces
- 高手指教:jsp中出现The full stack trace of the root cause is available in the Apache Tomcat/6.0.18 logs错误
- struts <html:file> 怎么让前面的框消失,先谢过了
- =Html.TextAreaFor的文本区域大小如何设置
- 正则表达式 提取 html 标签的内容,该如何解决
- @Html.CkEditor,该怎么处理
- string msg = (string)html.ViewData["Message"];该如何处理
- html password editbox 编码有关问题
- @Html.TextBoxFor(a => a.Title 上边有红线,说异常
- 关于伪静态,怎么配置.html
- MVC中,Html.DropDownListFor怎么绑定数据
- 为何FCKeditor会在自动生成<html>标签呢
- MVC 中得 Html.ActionLink 怎么linkText显示图片标记
- <DOCTYPE html. 这个是有什么用?该如何处理