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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux下移动文件命令_linux怎么移动文件

    linux下移动文件命令_linux怎么移动文件linux中移动文件在Linux中移动文件看似比较简单,但是可用的选项却比大多数人想象的要多。本文向初学者讲授如何在GUI和命令行中移动文件,同时还解释了幕后实际发生的情况,并介绍了许多经验丰富的用户很少探索的命令行选项。搬什么?在研究移动文件之前,值得仔细研究一下移动文件系统对象时实际发生的情况。创建文件后,会将其分配给一个inode,它是用于数据存储的文件系统中的固定点…

    2022年9月27日
    6
  • SpringBoot2.x系列教程汇总-从入门到精通「建议收藏」

    SpringBoot2.x系列教程汇总-从入门到精通「建议收藏」因为CSDN没有分类归纳博客的功能,所以特写本帖汇总SpringBoot2.x系列教程,方便大家查阅!SpringBoot2.x系列教程01–史前文明之Spring简介SpringBoot2.x系列教程02–史前文明之Spring发展史SpringBoot2.x系列教程03–新纪元之SpringBoot初相见SpringBoot系列教程04–新纪元之SpringBoot环境……

    2022年9月25日
    3
  • java过滤器Filter「建议收藏」

    java过滤器Filter「建议收藏」一、简介Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断如是否有权限访问页面等。其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request、Response)统一设置编码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、…

    2022年6月9日
    35
  • obs录制黑屏怎么解决_obs窗口捕获黑屏

    obs录制黑屏怎么解决_obs窗口捕获黑屏00.目录文章目录00.目录01.问题描述02.问题分析03.问题解决04.成功测试01.问题描述打开OBS后,新建场景、新建显示器捕获后,黑屏没有显示,即使点击开始录制,然后结束录制后,录制的视频仍然是黑屏。02.问题分析安装包是从官网下载的,安装过程没有报错,启动过程也没有报错,但是却捕捉不到显示器中的图像。首先考虑的是软件兼容性的问题,但是在我将兼容性设置成”W…

    2022年4月19日
    112
  • data grip激活(JetBrains全家桶)2022.01.30

    (data grip激活)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月31日
    180
  • MATLAB好玩的代码_Matlab代码

    MATLAB好玩的代码_Matlab代码大家可以在Matlab下实验下。。。。。。%Mostshiningnationalwind//最炫民族风onMatlab%TheModificationisfrom”canon”,notbymefs=44100;%sampleratedt=1/fs;T16=0.125;t16=[0:dt:T16];[tempk

    2025年11月21日
    5

发表回复

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

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