Java解析HTML標籤Tag,java解析tag

來源:互聯網
上載者:User

Java解析HTML標籤Tag,java解析tag

import java.util.HashMap;import java.util.Map;public class TagParser {private Integer index = 0;private char[] tagChar;private int position = 0;/* 解析符號 */private char symbol = '"';public static final String START_SCRIPT = "<script";public static final String END_SCRIPT = ">";public static final String END_SCRIPT_1 = "/>";public static final String EQ = "=";public static final char SPACE = ' ';public static final String MUST_SPACE = " ";public static final String TAB = "";public static final String SYMBOL = "'";private DFAStatus status;private Map<Integer, Entity> map = new HashMap<Integer, Entity>();private Map<String, String> result = new HashMap<String, String>();public static void main(String[] args) throws SymbolError {String tag = "<script filter=\"a\'\" type=\"text/javascript\" id='node' src=\"http://www.test.com/abc.js\" async=\"true\" />";int i = 0;long start = System.currentTimeMillis();while (i < 10) {TagParser token = new TagParser(tag);token.parser();System.out.println(token.getAttr("src"));i++;System.out.println(token);}System.out.println("use time:" + (System.currentTimeMillis() - start));}private boolean startsWith(String str) {char[] chat = str.toCharArray();if (position + chat.length > tagChar.length) {return false;}for (int i = 0; i < chat.length; i++) {if (tagChar[position + i] != chat[i]) {if (is_az(chat[i])) {if (tagChar[position + i] == chat[i] - 32) {continue;}}return false;}}return true;}public void parser() throws SymbolError {if (status == null) {status = DFAStatus.UNSTART;skipSpace();}if (status == DFAStatus.UNSTART) {if (startsWith(START_SCRIPT)) {position += START_SCRIPT.length();status = DFAStatus.START;parser();} else {throw new SymbolError("語法錯誤:" + tagChar[position]);}} else if (status == DFAStatus.START) {nextSpace();parser();} else if (status == DFAStatus.NULL) {skipSpace();if (startsWith(END_SCRIPT_1)) {status = DFAStatus.DONE;done();return;} else if (startsWith(END_SCRIPT)) {status = DFAStatus.DONE;done();return;}parserName();parser();} else if (status == DFAStatus.EQ) {parserVal();parser();} else if (status == DFAStatus.SYMBOL_END) {status = DFAStatus.NULL;parser();}}private void done() {for (Entity entity : map.values()) {result.put(entity.name, entity.value);}}private void parserVal() throws SymbolError {skipSpace();StringBuilder builder = new StringBuilder();int startIndex = position;for (int i = position; i < tagChar.length; i++) {if (i == startIndex) {if (tagChar[i] == '\'' || tagChar[i] == '"') {symbol = tagChar[i];status = DFAStatus.SYMBOL_START;position++;} else {throw new SymbolError("語法錯誤:" + tagChar[position]);}} else {if (tagChar[i] == symbol) {status = DFAStatus.SYMBOL_END;position++;break;} else {builder.append(tagChar[i]);position++;}}}map.get(index).value = builder.toString();index++;}private boolean is_AZ(char chat) {return chat >= 65 && chat <= 90;}private boolean is_az(char chat) {return chat >= 97 && chat <= 122;}private void parserName() throws SymbolError {StringBuilder builder = new StringBuilder();for (int i = position; i < tagChar.length; i++) {if (is_az(tagChar[i]) || is_AZ(tagChar[i])) {builder.append(tagChar[i]);position++;} else {if (builder.length() > 0) {skipSpace();nextEQ();break;}}}if (builder.toString().length() == 0) {throw new SymbolError("語法錯誤:" + tagChar[position]);}map.put(index, new Entity(builder.toString()));}private void nextEQ() throws SymbolError {if (startsWith(EQ)) {position++;status = DFAStatus.EQ;} else {throw new SymbolError("語法錯誤:" + tagChar[position]);}}private void skipSpace() {for (int i = position; i < tagChar.length; i++) {if (tagChar[i] == SPACE || tagChar[i] == '\t') {position++;} else {return;}}}private void nextSpace() throws SymbolError {if (startsWith(MUST_SPACE)) {position += MUST_SPACE.length();status = DFAStatus.NULL;} else if (startsWith(TAB)) {position += TAB.length();status = DFAStatus.NULL;} else {throw new SymbolError("語法錯誤:" + tagChar[position]);}}public String getAttr(String name) {return result.get(name);}public TagParser(String str) {this.tagChar = str.toCharArray();}@Overridepublic String toString() {return result.toString();}public static class SymbolError extends Exception {private static final long serialVersionUID = 2441411373778495898L;public SymbolError(String msg) {super(msg);}}public static class Entity {public Entity(String name) {this.name = name;}public String name;public String value;@Overridepublic String toString() {return "[" + name + ":" + value + "]";}}public enum DFAStatus {UNSTART, START, SYMBOL_START, SYMBOL_END, DONE, NULL, EQ}}


java 怎解析html標籤

如果嫌麻煩,有個專門解析html的jar包,免費的 很小 叫 jsoup 你搜搜 一個頁面的的任何標籤的任何值 不超過4句代碼 都能取出來
 
JAVA解析html

吧源檔案找到,去掉html的符號就可以啦。給你看一段我寫的,寫的不好,還得改呢(*^__^*) 嘻嘻……:
public String HtmlToTextGb2312(String inputString)
{
String htmlStr = inputString; //含html標籤的字串
String textStr ="";
Pattern p_script;
Matcher m_script;
Pattern p_style;
Matcher m_style;
Pattern p_html;
Matcher m_html;
Pattern p_houhtml;
Matcher m_houhtml;
Pattern p_spe;
Matcher m_spe;
Pattern p_blank;
Matcher m_blank;
Pattern p_table;
Matcher m_table;
Pattern p_enter;
Matcher m_enter;

try {
String regEx_script = "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>";
//定義script的Regex.
String regEx_style = "<[\\s]*?style[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?style[\\s]*?>";
//定義style的Regex.
String regEx_html = "<[^>]+>";
//定義HTML標籤的Regex
String regEx_houhtml = "/[^>]+>";
//定義HTML標籤的Regex
String regEx_spe="\\&[^;]+;&qu......餘下全文>>
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.