JAVA学习笔记Day09——JAVA用正则表达式简单解析

来源:互联网 发布:密码算法库 编辑:程序博客网 时间:2024/05/24 04:59

利用简单表达式、堆栈方法处理简单XML的解析

package net.xiaohong.xml;import java.util.ArrayList;import java.util.List;import java.util.Stack;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * Project :Learon09 * Created : * Date : 2016/8/2 */public class Test01 {    public static void main(String[] args) {        String str = "<Books>\n" +                "    <Book>\n" +                "        <Name>JAVA基础</Name>\n" +                "        <Price>30.00</Price>\n" +                "    </Book>\n" +                "    <Book>\n" +                "        <Name>JAVA入门</Name>\n" +                "        <Price>30.00</Price>\n" +                "    </Book>\n" +                "    <Book>\n" +                "        <Name>JAVA精通</Name>\n" +                "        <Price>30.00</Price>\n" +                "    </Book>\n" +                "    <Book>\n" +                "        <Name>颈椎康复指南</Name>\n" +                "        <Price>90.00</Price>\n" +                "    </Book>\n" +                "\n" + "<Book/>" +                "</Books>";        Pattern pattern = Pattern.compile("<(/?)([^<>/]+)(/?)>");        Matcher matcher = pattern.matcher(str);        Stack<Book> stack = new Stack<>();        Stack<Integer> last = new Stack<>();        List<Book> list = null;        while (matcher.find()) {            if (matcher.group(1).isEmpty()) {                last.push(matcher.end());                switch (matcher.group(2)) {                    case "Books":                        list = new ArrayList<>();                        break;                    case "Book":                        stack.push(new Book());                        break;                }                if (!matcher.group(3).isEmpty()) {                    switch (matcher.group(2)) {                        case "Book":                            last.add(last.pop());                            break;                    }                }            }else {                Integer pop = last.pop();//                System.out.println(pop);                switch (matcher.group(2)) {                    case "Book":                        list.add(stack.pop());                        break;                    case "Name":                        stack.peek().setName(str.substring(pop,matcher.start()));                        break;                    case "Price":                        stack.peek().setPrice(Float.parseFloat(str.substring(pop,matcher.start())));                        break;                }            }        }        for (Book book : list) {            System.out.println(book);        }    }}

这里写图片描述

0 0