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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梁小波 中级黑马   /  2012-6-3 10:42  /  2460 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

字符串的indexOf(’a‘,99);
java是怎么实现的貌似int indexOf(String  str,int fromindex)中fromindex不会出数组的越界异常。int lastIndexOf(int ch  ,int fromindex)也不会;
String的存储不是一个private final char value[]吗?那他查找的怎么会没有越界呢?还是java内部处理了?
求解!!!!

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 吴超 于 2012-6-3 11:03 编辑

  1. <FONT color=red>indexOf()的字符串所在的位置,在哪个位置就返回所在位置减去1(这是角标),有重复按顺序得出第一个。
  2. 如果没有找到, 则返回 -1。</FONT>



  3. <FONT color=red>下面是源码,没复制完全,有兴趣可以参考,可以提高自己编码水平
  4. </FONT>public int indexOf(int ch, int fromIndex) {
  5.         int max = offset + count;
  6.         char v[] = value;

  7.         if (fromIndex < 0) {
  8.             fromIndex = 0;
  9.         } else if (fromIndex >= count) {
  10.             // Note: fromIndex might be near -1>>>1.
  11.             return -1;
  12.         }

  13.         int i = offset + fromIndex;
  14.         if (ch < Character.MIN_SUPPLEMENTARY_CODE_POINT) {
  15.             // handle most cases here (ch is a BMP code point or a
  16.             // negative value (invalid code point))
  17.             for (; i < max ; i++) {
  18.                 if (v[i] == ch) {
  19.                     return i - offset;
  20.                 }
  21.             }
  22.             return -1;
  23.         }

  24.         if (ch <= Character.MAX_CODE_POINT) {
  25.             // handle supplementary characters here
  26.             char[] surrogates = Character.toChars(ch);
  27.             for (; i < max; i++) {
  28.                 if (v[i] == surrogates[0]) {
  29.                     if (i + 1 == max) {
  30.                         break;
  31.                     }
  32.                     if (v[i+1] == surrogates[1]) {
  33.                         return i - offset;
  34.                     }
  35.                 }
  36.             }
  37.         }
  38.         return -1;
  39.     }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1 赞一个!

查看全部评分

回复 使用道具 举报
吴超 发表于 2012-6-3 10:55

谢谢,if(fromIndex >= count)是这里处理了是吧;
一直用记事本写程序还没看过java源文件,你是怎么找的,用工具吗?
回复 使用道具 举报
梁小波 发表于 2012-6-3 11:28
谢谢,if(fromIndex >= count)是这里处理了是吧;
一直用记事本写程序还没看过java源文件,你是怎么找的 ...

用工具查看,或者直接找到jdk的SRC文件,里面都是源码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马