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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴通 中级黑马   /  2012-9-13 05:05  /  1368 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吴通 于 2012-9-15 15:17 编辑

class Demo
{
        public static void main(String[] args)
        {
                StringBuffer sb=new StringBuffer();
                sb.append(34);
                sb.append("abc");
                char[] chs=new char[30];
                sb.getChars(0,5,chs,1);

                for(int x=0;x<sb.length();x++)
                {
                        System.out.println(chs[x]);
                }
        }
}


结果为

3
4
a
b

34不是一个整体吗?还有c怎么没有打印?

评分

参与人数 1黑马币 +3 收起 理由
唐志兵 + 3 19分了 该看高深技术教程了。

查看全部评分

4 个回复

倒序浏览
void java.lang.StringBuffer.getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)

      srcBegin start copying at this offset.
      srcEnd stop copying at this offset.
      dst the array to copy the data into.
      dstBegin offset into dst.

应该和dstBegin有关系,翻译过来指,目标位置的偏移!如果dstBegin为0,就可以全部输出!
回复 使用道具 举报
本帖最后由 翁发达 于 2012-9-13 08:31 编辑

这个问题的关键点在于:
字符串一旦累加合并后为一个字符一个字符串成的整体,这个时候就不存在34为一个整体的说法,除非是字符串数组,
而且,就算不讲这个,char[] 里的可以存在34吗?其里面只能存在单引号引起来的单个字符!所以,34转成char[] 后不可能是一个整体
第二就是你的打印长度.


class Demo
{
        public static void main(String[] args)
        {
                StringBuffer sb=new StringBuffer();
                sb.append(34);
                sb.append("abc");
                char[] chs=new char[30];
                sb.getChars(0,5,chs,1); ----所以,这里是把3,4,a,b,c从char[] 下标1开始,赋值过去了.

                for(int x=0;x<sb.length();x++)
//---但是,注意,你这里打印的长度是sb.length();而不是chs.length,所以你打印的长度只有5个,且从下标0开始,所以最终结果是:空字符 3 4 a b 总共5个元素.
//c 在char[] 里,但没有打印出来
                {
                        System.out.println(chs[x]);
                }
        }
}

回复 使用道具 举报
字符串是一堆字符的组合体,你将字符串转换为字符数组,就相当于将字符串中的每一个字符挨个取出放入字符数组。
34,你将它加入字符串,它就不是一个int型数字了,而是成了字符串,通俗点就是 “三十四” 成了 “三四”。
所以它进入字符数组的时候就是  以一个字符串的形式  分开存进去的。

public class Demo {
        public static void main(String[] args) {
                StringBuffer sb = new StringBuffer();
                sb.append(34);
                sb.append("abc");
                char[] chs = new char[30];
                sb.getChars(0, 5, chs, 1);

                for (int x = 0; x < sb.length(); x++) {//至于为什么没有打印 c  ,你的 x<sb.length()  ,应该是 x<=sb.length() ,因为
                        System.out.println(chs[x]);          你取的是StringBuffer 放在char数组里面的所有内容,就应该按StringBuffer的
                }                                                            的整个长度取,是x<=sb.length(),而不是 x<sb.length() ,如果要取数组下标                 
        }                                                                   的话是用 x<sb.length(),而不是x<=sb.length(),如果按楼上所说取chs.length
}                                                                           chs.length是30,取出来的话后面会跟很多空格,因为后面的角标没有赋值
回复 使用道具 举报
回复了,把编辑的内容全乱了。

public class Demo {
        public static void main(String[] args) {
                StringBuffer sb = new StringBuffer();
                sb.append(34);
                sb.append("abc");
                char[] chs = new char[30];
                sb.getChars(0, 5, chs, 1);

                for (int x = 0; x < sb.length(); x++) {//至于为什么没有打印 c  ,你的 x<sb.length()  ,应该是 x<=sb.length() ,因为
你取的是StringBuffer 放在char数组里面的所有内容,就应该按StringBuffer的 的整个长度取,是x<=sb.length(),而不是x<sb.length() ,如果要取数组下标的话是用 x<sb.length(),而不是x<=sb.length(),如果按楼上所说取chs.length , chs.length是30,取出来的话后面会跟很多空格,因为后面的角标没有赋值   
               
                   System.out.println(chs[x]);         
                }                                                         
        }                                                                  
}                                                                          
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马