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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© barcelona 中级黑马   /  2017-3-17 14:37  /  2690 人查看  /  26 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本人小白一枚,在使用lastIndexOf(String str, int fromIndex)方法时,出现了让我懵逼的问题,特此向大神们求助,现将代码写于下面:
private static void demo6() {
                String str = "asrrdsgrrerr";
                int length1 = str.indexOf("rr",2);
                int length2 = str.lastIndexOf("rr",2);
                int length3 = str.lastIndexOf("rr",3);       
                System.out.println(length1);
                System.out.println(length2);
                System.out.println(length3);
        }
我在测试类main()方法中调用demo6时输出2 2 2 ,我不明白为什么length2等于2,不是应该是-1吗?
源代码截图: http://bbs.itheima.com/forum.php?mod=attachment&aid=MTUxNzY1fGQ0YWU5NGMxMGZlNDFkYjJiYjg5ZmRhMzMyNWIyMWI0fDE3MzEwMjkxMzM%3D&request=yes&_f=.png

2.png (6.7 KB, 下载次数: 86)

2.png

26 个回复

正序浏览
看了源码没看懂,悲哀
回复 使用道具 举报
barcelona 发表于 2017-3-18 17:53
从源码来看,我觉得你这样理解不对.
子串首先拿最后一个字符和母串比较,那么母串从什么地方开始呢?母串从 ...

确实理解不对,看来要继续研读研读
回复 使用道具 举报
旧时光9527 发表于 2017-3-18 16:40
其实,子串与要比较的串(母串)比较,首先分别用字符数组存储,然后把子串的第一个字符与母串要开始的地方 ...

从源码来看,我觉得你这样理解不对.
子串首先拿最后一个字符和母串比较,那么母串从什么地方开始呢?母串从指定的索引加子串最大索引值开始.楼上的解析源码的兄弟已经讲的很好了,可以仔细看看!
回复 使用道具 举报
旧时光9527 发表于 2017-3-18 16:18
我看错了,应该从源码上回答的,楼上那位讲得很好

其实,子串与要比较的串(母串)比较,首先分别用字符数组存储,然后把子串的第一个字符与母串要开始的地方进行比较,子串的第一个r和母串中第一次出现r比较,发现相同,记录下这个索引,这时的索引是2,但是第二个r与母串不同,然后就不比较了,这时他返回的是第一个相同的索引,也就是2
主要是字符相比较,相同记录当时的索引
回复 使用道具 举报
barcelona 发表于 2017-3-18 15:43
我知道是最后一次出现处的索引,但是这个指定索引怎么理解?是不是就是lastIndexOf(String str, int fromIn ...

我看错了,应该从源码上回答的,楼上那位讲得很好
回复 使用道具 举报
Tupurp 发表于 2017-3-17 16:13
修改后的,希望管理员给技术分
我看了下源码。大体内容如下:
首先呢lastindexof(str)方法体内部直接只写 ...

解析了源码厉害了
回复 使用道具 举报
旧时光9527 发表于 2017-3-18 01:17
返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
注意是最后一次出现处的 ...

我知道是最后一次出现处的索引,但是这个指定索引怎么理解?是不是就是lastIndexOf(String str, int fromIndex)方法中传递的参数fromIndex的值?其实并没有字面理解的那么简单.
回复 使用道具 举报 1 0
陈大仙… 发表于 2017-3-18 09:16
整了一早上,还是没整懂

仔细研究下源码会加深理解
回复 使用道具 举报
newu 发表于 2017-3-18 13:10
楼主厉害,支持楼主

高级黑马都来水经验了,哈哈?
回复 使用道具 举报
Tupurp 发表于 2017-3-17 16:13
修改后的,希望管理员给技术分
我看了下源码。大体内容如下:
首先呢lastindexof(str)方法体内部直接只写 ...

谢谢这么耐心的解答,我也看了源码很久,还是没怎么看懂,可能是源于才入门吧,我想以后会理解的更好.
然后关于你以上的解答,我有几个问题:
1:这句话     其次,再判断你这个子串是不是空的啊,如果是空的,且你定义的索引位置没有超出我母串的长度,那就输出你的索引,否则输出母串的最后一个索引角标(这里我有点疑问:我觉得这里应该是输出母串的最后一个索引角标加一.但我不明白这个意义在哪里?)。   
2:比如说啊,子串有六个字符,已经有两个一样了,但是这时候发现和子串倒数第三个字符比较的(int+srtlong)角标位置到了角标1了,那还比个屁啊,肯定不满足啊.    这里我觉得是如果已经有两个一样的,倒数第三个不一样,那么又会重新开始和子串的最后一个字符比较?

最后,我觉得它API里的说法很容易让人误解,只有仔细去看看源码才能更好的理解!
回复 使用道具 举报
newu 黑马帝 2017-3-18 13:10:56
17#
楼主厉害,支持楼主
回复 使用道具 举报
整了一早上,还是没整懂
回复 使用道具 举报
返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
注意是最后一次出现处的索引,认真看这几个字,大兄弟
回复 使用道具 举报
通俗点来说,一条轮船,给你划一片水域,你船头进去了,哪怕你船尾还在外面,你也算这个水域的了(当然,前提是你中间船身得有,你得是一条完整的船)
回复 使用道具 举报
barcelona 发表于 2017-3-17 16:29
懂了,你的一句整个字符串就说清楚了,之前一直以为是从指定位置处开始向前搜索到0后就不再搜索了,谢谢 ...

我之前理解的是错的哦!!!亲,只搜索引位置前面的
回复 使用道具 举报
zhao543 发表于 2017-3-17 19:31
字体颜色怎么设置的

Window—>Preferences—>General—>Apperance选择主题为Dark
回复 使用道具 举报
字体颜色怎么设置的
回复 使用道具 举报
Tupurp 发表于 2017-3-17 16:45
那你不好奇为什么你len3结果居然是2吗

我在想关于那个k值的公式,虽然没怎么看懂,但是我有以下理解,不知对不对?
从你索引位置开始,不管你是正向搜索还是反向搜索,只要和你的子字符串有相同的字符串,那么返回值就是第一次出现你字符串的索引值?
我不知道有没有表达清楚
回复 使用道具 举报
本帖最后由 barcelona 于 2017-3-17 17:11 编辑
Tupurp 发表于 2017-3-17 16:45
那你不好奇为什么你len3结果居然是2吗

我仔细想了想,好像是没怎么想通. 这句话:返回指定子字符串在此字符串中最后一次出现处的索引,它这里的最后一次出现到底怎么才算最后一次出现,还有你给的图片中的关于k值得公式也看不懂.
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马