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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Fightingforever 中级黑马   /  2014-10-27 12:02  /  2836 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public static void method_split()
  2.         {
  3.                 String s="abcdefgh";
  4.                 String s1=s.substring(1,15);//角标越界
  5.                 char s2=s.charAt(15);//角标越界
  6.                 int b=s.indexOf('a',15);//-1
  7.                 sop(s1);
  8.                 sop(s2);
  9.                 sop(b);
  10.                 }
  11. 同样都是超过字符串的长度,为什么indexOf()不会报角标越界,而substring()和charAt()会报角标越界
复制代码


评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 淡定

查看全部评分

11 个回复

倒序浏览
不知道,感觉这个没有为什么吧,人家就那么实现的
回复 使用道具 举报
有些是规则没有为什么的。因为内部定的机制就是这样
回复 使用道具 举报
这种问题很简单,通过选中函数,按f3就可以查看底层实现
先说indexof底层实现中有一个判断,其中fromIndex就是你说写的角标
  if (fromIndex >= sourceCount) {
            return (targetCount == 0 ? sourceCount : -1);
        }
subString 的底层实现也有一个判断,但他是抛出异常
        if (endIndex > value.length) {
            throw new StringIndexOutOfBoundsException(endIndex);
        }
charAt同样是抛出异常
   public char charAt(int index) {
        if ((index < 0) || (index >= value.length)) {
            throw new StringIndexOutOfBoundsException(index);
        }
        return value[index];
    }

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
indexof是在字符串中去查找要匹配字符串,不存在越界的问题
回复 使用道具 举报
查找帮助文件,String中的indexof(int)方法的返回
返回:
在此对象表示的字符序列中第一次出现该字符的索引;如果未出现该字符,则返回 -1。
回复 使用道具 举报
indexof(int ch),这里的ch应该是字符的阿斯科马值
回复 使用道具 举报
wzg1015 发表于 2014-10-27 13:33
这种问题很简单,通过选中函数,按f3就可以查看底层实现
先说indexof底层实现中有一个判断,其中fromIndex ...

真的很感激 谢谢你!
回复 使用道具 举报
gaoyang 中级黑马 2014-10-27 18:15:14
9#
我也学到了
回复 使用道具 举报
Fightingforever 发表于 2014-10-27 17:50
真的很感激 谢谢你!

不客气,其实,上面的是一种想法 。
还有一种想法就是从客户的角度考虑,如果给定角标去截取或者获取,由于返回的是字符串或者字符,一种可行的方法是返回null告诉客户异常,但是对于这种有返回值的一般不建议返回null,因为需要客户去判断,而客户有时候会忘记判断,会导致问题被隐藏,所以唯一告诉客户错误的方法就是抛出异常。
而查找,他的返回值-1是可以代表没找到,所以可以把角标越界的问题给包含进去,所以不抛出。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
多看看API文档吧,那里可以知道的
回复 使用道具 举报
坚持525 发表于 2014-10-27 20:02
多看看API文档吧,那里可以知道的

好的 谢谢指导 以后一定多看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马