黑马程序员技术交流社区

标题: 请教一个将字符数组转成字符串的问题 [打印本页]

作者: 刘润辰    时间: 2012-8-6 19:08
标题: 请教一个将字符数组转成字符串的问题
今天看教学视频,学到这个构造函数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, 下载次数: 39)

4444.png

作者: 刘润辰    时间: 2012-8-6 19:12
String s = new String(arr,2,3); 这样的话为什么打印结果会是s=cde
???
我明明以下标3结束啊?应该是s=de才对啊?求高人解答
作者: 刘润辰    时间: 2012-8-6 19:15
又看了一遍视频,毕老师确实是这样说的啊  String(char[],offset,count):offset是开始  ,count是结束

他打印的String s = new String(arr,2,3);明明是位置正确的啊?为什么呢??为什么呢?
作者: 杨锦    时间: 2012-8-6 19:20
本帖最后由 杨锦 于 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 数组的范围。
作者: 刘润辰    时间: 2012-8-6 19:23
哦,呵呵。知道啦。谢谢啊
作者: 樊占江    时间: 2012-8-6 19:25
他的意思是,从2开始,数量是5个。 就是说从第二个字符开始,数量是五个,所以会报错
不知道我的回答你看明白没?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2