A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张先龙 中级黑马   /  2013-4-13 12:28  /  1888 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张先龙 于 2013-4-13 19:22 编辑

public class SbTest {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                String str="三四五六";       
                StringBuilder sb=new StringBuilder(str);       
                int len=sb.length();       
                sb.insert(len-1, "拾");        //1
                System.out.println(sb.toString());       
                sb.insert(len-2, "佰");        //2
                System.out.println(sb.toString());       
                sb.insert(len-3, "仟");        //3
                System.out.println(sb.toString());       
        }
}
/*对应1、2、3的结果如下
三四五拾六
三四佰五拾六
三仟四佰五拾六
为什么2不是在“五”的后面插入“佰”呢,sb的长度不是已经改变了吗?
3也是。求解
*/

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

4 个回复

正序浏览
length方法不是同步的 只是获取了一次长度
回复 使用道具 举报
  int len=sb.length(); 只计算了一次sb的长度为4.之后虽然用insert()方法插入了字符串,
     但之后没有重新调用int len=sb.length();计算。所以len=4;没变。就出现了你上面的情况。
回复 使用道具 举报
明显len的长度一直没变的为4,当你sb.insert(len-1, "拾");的时候其实就是在3的角标处加的
sb.insert(len-2, "佰"); 在角标2的位置加的
sb.insert(len-3, "仟");在角标1的位置
所以咯,很清楚了
回复 使用道具 举报

len一直等于4,sb的长度改变,你没有重新计算len值。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马