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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

刘润辰

初级黑马

  • 黑马币:0

  • 帖子:26

  • 精华:0

今天看教学视频,学到这个构造函数String(char[])。然后自己动手试了一下,发现一个问题。

学到这个方法
String(char[],offset,count):这个方法是将字符数组中的一部分转成字符串。

然后自己动手试了一下

public class Test1 {
public static void main(String[] sge){
   method_t();
}

public static void stp(Object ob){
  System.out.println(ob);
}

public static void method_t(){
  char[] arr = {'a','b','c','d','e','f'};
  String s = new String(arr,1,5);//这样是能打印出来结果的!
  stp("s="+s);
  
}
}
打印结果s=bcdef

但是把 String s = new String(arr,1,5);换成String s = new String(arr,2,5);

为什么就数组越界呢?Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 7

char[] arr = {'a','b','c','d','e','f'}; 中最后一个下标明明是5啊??



4444.png (6.27 KB, 下载次数: 1)

4444.png

5 个回复

倒序浏览
String s = new String(arr,2,3); 这样的话为什么打印结果会是s=cde
???
我明明以下标3结束啊?应该是s=de才对啊?求高人解答
回复 使用道具 举报
又看了一遍视频,毕老师确实是这样说的啊  String(char[],offset,count):offset是开始  ,count是结束

他打印的String s = new String(arr,2,3);明明是位置正确的啊?为什么呢??为什么呢?
回复 使用道具 举报
本帖最后由 杨锦 于 2012-8-6 19:23 编辑

String(char[],offset,count):这个方法是将字符数组中的一部分转成字符串。//楼主这里就理解错了,里面两个参数的意思是,起始索引,和个数,不是起始和结束
然后自己动手试了一下

public class Test1 {
public static void main(String[] sge){
   method_t();
}

public static void stp(Object ob){
  System.out.println(ob);
}

public static void method_t(){
  char[] arr = {'a','b','c','d','e','f'};
  String s = new String(arr,1,5)  //这里是从1号角标开始,取出5个,所以是 bcdef
                                                    // 你改成 String s = new String(arr,2,5),那就是从角标2开始取五个,那就要取到角标6了,你的数组长度只有6,怎么可能有角标6呢
stp("s="+s);                                 //所以就溢出了嘛
  
}
}
打印结果s=bcdef

但是把 String s = new String(arr,1,5);换成String s = new String(arr,2,5);

为什么就数组越界呢?Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 7

char[] arr = {'a','b','c','d','e','f'}; 中最后一个下标明明是5啊??









这是文档上的解释

Stringpublic String(char[] value,              int offset,              int count)分配一个新的 String,它包含取自字符数组参数一个子数组的字符。offset 参数是子数组第一个字符的索引,count 参数指定子数组的长度。该子数组的内容已被复制;后续对字符数组的修改不会影响新创建的字符串。 参数: value - 作为字符源的数组。 offset - 初始偏移量。 count - 长度。 抛出: IndexOutOfBoundsException - 如果 offset 和 count 参数索引字符超出 value 数组的范围。
回复 使用道具 举报
哦,呵呵。知道啦。谢谢啊
回复 使用道具 举报
他的意思是,从2开始,数量是5个。 就是说从第二个字符开始,数量是五个,所以会报错
不知道我的回答你看明白没?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马