XML格式化的一段代码

XML格式化的一段代码起因没有找到android有相关的工具类,又不要为了格式化个xml导入一个jar包。于是自己写了个xml格式化的代码。代码如下:/***格式化xml**@return*/publicStringformat(Stringstr){StringBufferbuffer=…

大家好,又见面了,我是你们的朋友全栈君。

起因

没有找到android有相关的工具类,又不要为了格式化个xml导入一个jar包。

于是自己写了个xml格式化的代码。

代码如下:

  /**
     * 格式化xml
     *
     * @return
     */
    public String format(String str) {
        StringBuffer buffer = new StringBuffer(str);
        int numSpace = 0;//空格的个数
        /**
         * 定位开始结束标签
         */
        int start = buffer.indexOf("<", 0);
        int end = buffer.indexOf(">", start);
        //定位下下个标签
        int nextStart =  buffer.indexOf("<", end);//-1之后
        boolean isNext = true;

        while (start != -1 && end != -1) {
            /**
             * 是否换行,已经换多少格
             */
            //如果当前为开始标签,下一个也为开始标签
            if ((buffer.indexOf("/", start) != start + 1 && buffer.indexOf("/", nextStart) != nextStart + 1)) {
                numSpace++;
                isNext = true;
            }
            //如果当前为开始标签,且下一个标签为结束标签
            else if ((buffer.indexOf("/", start) != start + 1 && buffer.indexOf("/", nextStart) == nextStart + 1)) {
                isNext = false;
            }
            //如果当前为结束标签,且下一个标签为开始标签
            else if ((buffer.indexOf("/", start) == start + 1 && buffer.indexOf("/", nextStart) != nextStart + 1)) {
                isNext = true;
            }
            //如果当前为结束标签,且下一个标签还是结束标签
            else if ((buffer.indexOf("/", start) == start + 1 && buffer.indexOf("/", nextStart) == nextStart + 1)) {
                numSpace--;
                isNext = true;
            }

            //这个位置判断是否是加空格
            if (isNext) buffer.insert(end + 1, "\n" + $t(numSpace));
            //标签向下移动
            start = buffer.indexOf("<", end);
            end = buffer.indexOf(">", start);
            nextStart =  buffer.indexOf("<", end);
        }


        // 注释:返回我们格式化后的结果
        return buffer.toString();
    }

    //返回N个\t
    private String $t(int num) {
        String t = "";
        for (int i = 1; i < num; i++) {
            t += "\t";
        }
        return t;
    }

记录于此。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160143.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • ArcGIS二次开发及应用学习的最佳网站

    ArcGIS二次开发及应用学习的最佳网站http://i.youku.com/gisxiaotian里面有大量的ArcGIS二次开发及应用的视频教程,作者会定期的上传ArcGIS教程,看了绝对受益匪浅!

  • java学习路线图(2018年最新版)

    java学习路线图(2018年最新版)java学习路线图(2018年最新版)最近有些网友问我如何自学Java后端,还有些是想从别的方向想转过来,但都不太了解Java后端究竟需要学什么,究竟要从哪里学起,哪些是主流的Java后端技术等等,导致想学,但又很迷茫,不知从何下手。我就以过来人的经历,写在这篇博客里,不一定都对,但都是我根据自己的经历总结出来的,供你们的参考。Java基础Java是一门纯粹的面向对象的编程语言,所…

  • Android 9.0 http无法访问网络问题

    Android 9.0 http无法访问网络问题

  • 可视化报表开发_可视化数据报表

    可视化报表开发_可视化数据报表当今时代,传统的报表工具已经很难满足人们对于数据可视化的期望了,而大数据处理工具却可以为人们提供了更多的选择。微金时代的RDP报表工具操作简便,可直接上手使用,无需编码,就可以制作各种复杂、炫酷的报表。RDP报表工具表格式报表功能和亮点根据中国特色的报表需求,研发出的轻量级的企业级Web报表工具。仅需简单拖拽式配置,即可制作出各种复杂、炫酷的报表。支持中国式复杂报表的处理,例如:Excel清单报表、交叉报表、分组报表、多源分片式报表、分块报表、表单报表、图形报表、回写报表、假设分析报表、二次.

  • mysql一主多从 读写分离_mysql读写分离原理

    mysql一主多从 读写分离_mysql读写分离原理简介:什么是主从复制,如何实现读写分离,看这篇你就懂了!思维导图文章已收录到我的Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary前言在很多项目,特别是互联网项目,在使用MySQL时都会采用主从复制、读写分离的架构。为什么要采用主从复制读写分离的架构?如何实现?有什么缺点?让我们带着这些问题开始这段学习之旅吧!为什么使用主从复制、读写分离主从复制、读写分离一般是一起使用的。目的很简单,就是为了提高数据库的并发性能。你想,假设是单机,读

  • java 取余运算

    java 取余运算取余运算符是“%”它是一个双目运算符,它的操作数通常是正整数也可以书负数甚至是浮点数,如果负数参与此运算,则需要特别注意,对于整数,java的取余运算规则如下a%b=a-(a/b)*b例如5%3=5-(5/3)*3=25%-3=5-(5/-3)*-3=2-5%3=-5-(-5/3)*3=-2-5%-3=-5-(-5/-3)*-3=-2如果操作数中有浮点数则采用的规则为…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号