重写trim方法时摸索出的删除数组长度的思路

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

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

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

Copy
@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

posted @   "无问西东"  阅读(198)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
网络创业项目 123how出海导航
点击右上角即可分享
微信分享提示
CONTENTS