首页 > 解决方案 > indexOf的重载

问题描述

我有一串

var inp = "ABCABCABC";

要获得第二次出现的“A”,我在下面做

int index = inp.indexOf("A", inp.indexOf("A")+1);

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

int index = inp.indexOf("A", inp.indexOf("A")+2); ---Not Working  WHY....?

但这是

int index = inp.indexOf("A", inp.indexOf("A", inp.indexOf("A")+1)+1); --- Working 

有什么建议么 ?

标签: javaindexof

解决方案


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

我建议你做的是使用循环。

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;
}

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

int index = inp.indexOf("A", inp.indexOf("A")+1);

这与

int index = inp.indexOf("A", 0+1);

或者

int index = inp.indexOf("A", 1);

作为0 + 1==1

如果您将代码更改为

int index = inp.indexOf("A", inp.indexOf("A")+2);

你得到

int index = inp.indexOf("A", 0+2);

仅在存在时才有效AA

这条线

int index = inp.indexOf("A", inp.indexOf("A", inp.indexOf("A")+1)+1);

评估为

int index = inp.indexOf("A", inp.indexOf("A", 0+1)+1);

或者

int index = inp.indexOf("A", 3+1);

或者

int index = inp.indexOf("A", 4);

推荐阅读