【StringBuffer练习题】练习使用StringBuffer的方法给字符串加分隔符--心得感悟

心得体会

1. 发现问题

// StringBuffer的方法实现给钱加逗号
  String money = "12445345456672326.2345";
// 12,445,345,456,672,326.2345

这道题使用了 StringBuffer的 insert().indexOf()方法,结合循环来完成循环移动, 来将这个 , 放到指定的位置,写起来发现不是很流畅,发现了各种问题

2. 解决问题

​ 通过老师的思路,更好的理解了解决问题的编程思想,编程就是将思路转换成代码的过程。可能你一开始就有了一个思路,但是为什么写出来的代码没有老师那么简洁,高效,逻辑清晰,发现原因:1.自己对于前面的循环并没有一个个更好的理解 2.将思路转换成代码缺少灵活度

3. 反思自身提升编程能力

3.1. 模仿老师写的代码

​ 老师的思路:化繁为简,先简后繁

1.获取索引 . 的索引 2.先尝试着自己去写一个基本的移动 ,然后将,插入使用 Insert() 方法,3.使用循环 4.优化代码

    // StringBuffer的方法实现给钱加逗号
        String money = "12445345456672326.2345";
        // 转成StringBuffer
        StringBuffer sb = new StringBuffer(money);
        // 1.找到. 的位置
        int index = sb.indexOf(".");
        // 2.往前移动三个位置的地方来插入 , 完成一个最基本的插入
        sb= sb.insert(i - 3, ",");                 
        System.out.println(sb);

如果字符的长度多了以后,就需要使用循环来加 , 于是自己在这里就是容易卡壳的地方,脑子里会冒出很多思路,想使用各种循环while() for()写出来就会产生各种 bug

自己这样写

    // 将string ==>StringBuffer
    StringBuffer phoneStr = new StringBuffer(priceStr);
    // 给字符加,
    // 获取到.的位置
    int index = phoneStr.indexOf(".");
    // 找到第一个位置
    index-=3;
    // 索引不小于0 就循环
    while (!(index <= 0)) {
    // 插入
    phoneStr.insert(index, ",");
    // 下一次移动
    index -= 3;
}

老师这样写

   // 使用 循环     
  for (int i = index-3;i>0;i-=3) {
           sb.insert(i,",");
    }

总是觉得没老师的思路清晰将问题复杂化了,于是我自己思考了一会研究了 以前总觉得简单的 for 循环 while 循环的语法 又发现了一些新东西

3.2 自己的思考

对这句话的理解 ====>思路翻译成代码

    // 3. 如果数据较长时候,就需要循环来实现
        // 思路:找到第一个位置,从第一个插入, 的地方开始,每次移动三个位置来插入,当位置变成了0停止、
        // for循环 初始值,判断,循环器
        // for循环的特点是 先做再移动,所以第一个位置要人为的找到做完了,然后再移动,然后再做
       // 所以 初始化 i = index -3; 根据不同的思路选用不同的循环
       for (int i = index-3;i>0;i-=3) {
           sb.insert(i,",");
       }

关于要怎么将 , insert 过去 ,要使用两种循环,for() while 先移动再插入,还是先插入再移动,不同的算法,代码也会写出不一样的效果,所以一开始就要想好确定一种思路再转换成代码,然后再优化,经量没想好的思路就下手写,反而达不到想要的效果。

3.2.1 使用 while() 循环

先移动再插入

        // while循环实现 先移动再做
        while (true){ // 不知道括号写什么,先true
            // 1.先移动
            index-=3;
            // 2.再插入
            sb.insert(index,",");
            // 3.判断下一次index是否大于0,不大于0就break跳出
            if (!(index-3>0)){
                break;
            }

        }

优化

// 优化 将判断放到 while括号中
        while (index-3>0){
            // 先移动
            index-=3;
            // 再插入
            sb.insert(index,",");
            // 判断下一次index是否大于0,不大于0就跳出
//            if (!(index-3>0)){
//                break;
//            }

        }

先插入再移动

 while循环实现

// 首先找到第一个位置
index-=3;
// 判断跳出循环在括号里写
while (index>0){
    // 先插入
    sb.insert(index,",");
    // 移动
    index-=3;

}

4.总结:

通过这个题我更好的理解了写代码的思路,不要小看任何一种简单的语法,更应该多思考解决问题背后的思路,语法只是工具,在将思路翻译成代码的过程中,还要更好的思考这个语法适合什么样的场景,平时要多注重思考,还有有什么更好的思路,更好的优化,一开始没有更好的思路的情况下,多去学习别人的思路,临摹代码,根据别人写的,不看别人代码的情况下,自己再根据思路自己再去复现代码,多积累思想,慢慢自己应该就能写出更优美的,更高效的语句。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值