首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >indexOf过载

indexOf过载
EN

Stack Overflow用户
提问于 2018-09-24 06:24:12
回答 2查看 974关注 0票数 1

我有一根绳子

代码语言:javascript
复制
var inp = "ABCABCABC";

"A“的第二次出现在下面

代码语言:javascript
复制
int index = inp.indexOf("A", inp.indexOf("A")+1);

但是如果我需要第三次出现"A",为什么我不能这样做呢?

代码语言:javascript
复制
int index = inp.indexOf("A", inp.indexOf("A")+2); ---Not Working  WHY....?

但这是

代码语言:javascript
复制
int index = inp.indexOf("A", inp.indexOf("A", inp.indexOf("A")+1)+1); --- Working 

有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-24 06:30:52

在这种情况下,+1只是添加了1,仅此而已。它不会跳过n事件。

我建议你用一个循环。

代码语言:javascript
复制
public static int findNth(String text, String find, int nth) {
    int last = -1;
    for (int i = 0; i < nth; i++) {
        last = text.indexOf(find, last + 1);
        if (last == -1) return -1;
    }
    return last;
}

您应该能够在调试器中看到这一点,但是在您的情况下

代码语言:javascript
复制
int index = inp.indexOf("A", inp.indexOf("A")+1);

这和

代码语言:javascript
复制
int index = inp.indexOf("A", 0+1);

代码语言:javascript
复制
int index = inp.indexOf("A", 1);

as 0 + 1 == 1

如果您将代码更改为

代码语言:javascript
复制
int index = inp.indexOf("A", inp.indexOf("A")+2);

你会得到

代码语言:javascript
复制
int index = inp.indexOf("A", 0+2);

只有在有AA的情况下,它才能工作。

这条线

代码语言:javascript
复制
int index = inp.indexOf("A", inp.indexOf("A", inp.indexOf("A")+1)+1);

评估为

代码语言:javascript
复制
int index = inp.indexOf("A", inp.indexOf("A", 0+1)+1);

代码语言:javascript
复制
int index = inp.indexOf("A", 3+1);

代码语言:javascript
复制
int index = inp.indexOf("A", 4);
票数 4
EN

Stack Overflow用户

发布于 2018-09-24 06:38:26

这只因为

代码语言:javascript
复制
int index = inp.indexOf("A");

返回A的第一次出现的索引,以第0字符(包括在内)开始。(如果设置第二个参数,则为见这里的文档

代码语言:javascript
复制
int index = inp.indexOf("A", 5);

indexOf只返回它在索引5时或之后找到的第一个A。

你在做的是

代码语言:javascript
复制
int index = inp.indexOf("A", inp.indexOf("A")+1);

...which找到"A“的第一个出现,然后移动到字符串中的下一个字符,然后查找第二个出现的"A”。只有当字符串中有多个"A“时,这才会起作用。

假设您有一个字符串,如

代码语言:javascript
复制
String phil = "ABACAB";`

然后phil.indexOf("A")返回0phil.indexOf("A", phil.indexOf("A")+1)简化为phil.indexOf("A", 0+1)或只是phil.indexOf("A", 1)。所以你在寻找第一个指数(ABACAB中的第一个"B“)第一次出现的"A”。这将返回2

做以下事情:

代码语言:javascript
复制
int index = inp.indexOf("A", inp.indexOf("A")+2);

做同样的事情,但移动两个字符后,发现第一次出现的"A“。因此,对于我们的示例,这简化为phil.indexOf("A", 2),它将返回2,找到它在第一个例子中找到的相同的第二个"A“。

要找到第三次发生的情况,您需要链接调用,正如您所注意到的:

代码语言:javascript
复制
int index = inp.indexOf("A", inp.indexOf("A", inp.indexOf("A")+1)+1);

或者使用第三方图书馆。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52473687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档