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;
    }

记录于此。

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

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

(0)
上一篇 2022年7月16日 下午6:36
下一篇 2022年7月16日 下午6:36


相关推荐

  • Python画图显示中文

    Python画图显示中文matplotlib作图时默认设置下为英文,无法显示中文,只需要添加下面两行代码即可plt.rcParams[‘font.sans-serif’]=[‘SimHei’]plt.rcParams[‘axes.unicode_minus’]=FalseExampleimportmatplotlib.pyplotaspltfromnumpy.randomimportmul…

    2022年6月1日
    39
  • 什么是 Sidecar[通俗易懂]

    什么是 Sidecar[通俗易懂]Sidecar是什么将本将属于应用程序的功能拆分成单独的进程,这个进程可以被理解为Sidecar。在微服务体系内,将集成在应用内的微服务功能剥离到了sidecar内,sidecar提供了微服务发现、注册,服务调用,应用认证,限速等功能。特点:Sidecar为独立部署的进程。sidecar降低应用程序代码和底层代码的耦合度,帮助异构服务通过sidecar快速接入微服务体系。Sidecar如何工作接下来以异构服务为基础介绍sidecar如何工作。Sidecar代理服务注册发现下图为异构

    2022年4月19日
    59
  • JS日期格式化转换方法

    JS日期格式化转换方法1.将日期转换为指定的格式:比如转换成年月日时分秒这种格式:yyyy-MM-ddhh:mm:ss或者yyyy-MM-dd。当然是网上的方法,只是总结下。可以为Date原型添加如下的方法:Date.prototype.format=function(fmt){varo={“M+”:this.getMonth()+1,…

    2022年6月12日
    32
  • textview长按复制_android-TextView的长按复制[通俗易懂]

    textview长按复制_android-TextView的长按复制[通俗易懂]引子android很多app都支持文本的选中,复制。根据观察,主要分为两类:1)自由复制(弹出框里面支持全选)2)仅支持全选复制今天工作中遇到了全选的需求,现总结出来,方便以后查阅.自由复制这种方式很简单,只需要两行代码,(下面的红色)android:layout_height=”wrap_content”android:text=”长按自由复制”android:textColorHighligh…

    2026年4月18日
    5
  • css中visiblity和display异同

    visiblity是设置元素的可见性,即可见/隐藏;隐藏后元素所占有位置保留;display是设置元素按什么样的方式来显示,是按块显示,显示成一条线的形式,显示为“消失”等等,当display

    2021年12月21日
    48
  • wireshark抓包新手使用教程_无root抓包使用教程

    wireshark抓包新手使用教程_无root抓包使用教程WireShark抓包使用教程–详细Wireshark是非常流行的网络封包分析软件,可以截取各种网络数据包,并显示数据包详细信息。常用于开发测试过程各种问题定位。本文主要内容包括:1、Wireshark软件下载和安装以及Wireshark主界面介绍。2、WireShark简单抓包示例。通过该例子学会怎么抓包以及如何简单查看分析数据包内容。3、Wireshark过滤器使用。通过过滤器可以筛选出想要分析的内容。包括按照协议过滤、端口和主机名过滤、数据包内容过滤。Wires…

    2025年9月29日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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