zoukankan      html  css  js  c++  java
  • 重写trim方法时摸索出的删除数组长度的思路

    先说下我重写trim()的思路:###

    • trim()功能:清除字符串前后两端的'空格'
    • 我分了前后两步处理:
      • 前缀空格:判断是空格,遍历数组,用后一位元素替换前一位,遍历一次所有元素前移一位,最后一位设为空格符,留给处理后缀空格的部分解决(开始还傻不拉几地将元素赋值为类型的初始值,混淆了初始值也可以是元素值);
      • 后缀空格:也是设循环,判断最后一位是否为空格。如果是将数组长度减1,即丢弃最末尾的空格元素;
        • 具体思路:
          当循环条件判断出结果为空时,声明一个新数组,并对其动态初始化,长度为原数组的长度-1(即 原数组.length-1);再用新数组的长度设置循环条件,通过遍历将原数组元素对应赋值给新数组元素;最后,直接把新数组的引用赋值给原数组(相当于就有两个引用指向同一片堆内存空间,也可以在原数组指向新数组后对新数组的引用赋值为null,等待垃圾回收器GC清理即可);至此,原数组引用所指向的数组内容就是去掉最后一位空格元素的了。

    简单说就是把一个数组的数据复制到比它长度小1的数组中,而后再用原来的数组引用去指向新数组。

    @Test
        public void overTrim(){
            String str = "   12 345 abc de   ";
            //将String转换成char[]
            char[] ch = str.toCharArray();
            int count = 0;
            while(count<ch.length){
    
                //前缀
                while (ch[0] == 32){
                for (int i = 0; i < ch.length-1; i++) {
                            ch[i] = ch[i+1];
                        }
                        ch[ch.length-1] = 32;
                    }
                //尾部
                while (ch[ch.length-1] == 32){
                    //新建一个临时数组,长度比原数组-1,用于接收原数组的数据
                    char[] ch2 = new char[ch.length-1];
                    for (int i = 0; i < ch2.length; i++) {
                        ch2[i] = ch[i];
                    }
                    ch = ch2;//将原数组引用指向新数组的地址,转型成功!
                    ch2 = null;//此时ch2就成了多余的引用了,赋值为null即为无用引用,交给GC处理
                }
                count++;
                }
            String str2 = String.valueOf(ch);
            System.out.println(str2);
            }
    }
    

    手打空格也行' ',不过看不见的东西总容易出错,我就用空格在ASCII码中对应十进制数32

  • 相关阅读:
    格式与布局 float 左右悬浮边框
    格式与布局
    样式表
    c# 验证码
    邮箱登录页面
    表单与框架
    HTML 练习 做简历表
    HTML 基础
    验证码 随机数
    Linux 三剑客 -- awk sed grep
  • 原文地址:https://www.cnblogs.com/csyh/p/12271602.html
Copyright © 2011-2022 走看看