黑马程序员技术交流社区

标题: 小问题,有人知道indexOf()的实现吗? [打印本页]

作者: 梁小波    时间: 2012-6-3 10:42
标题: 小问题,有人知道indexOf()的实现吗?
字符串的indexOf(’a‘,99);
java是怎么实现的貌似int indexOf(String  str,int fromindex)中fromindex不会出数组的越界异常。int lastIndexOf(int ch  ,int fromindex)也不会;
String的存储不是一个private final char value[]吗?那他查找的怎么会没有越界呢?还是java内部处理了?
求解!!!!
作者: 吴超    时间: 2012-6-3 10:55
本帖最后由 吴超 于 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.     }
复制代码

作者: 梁小波    时间: 2012-6-3 11:28
吴超 发表于 2012-6-3 10:55

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

用工具查看,或者直接找到jdk的SRC文件,里面都是源码




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