java - 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
有什么建议么 ?
解决方案
在这种情况下,+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);
推荐阅读
- django - 来自 ManyToManyField 的 Django Serializer 使用 through
- android - USB调试不起作用,尝试了一切
- graphql - 在 Gridsome gridsome.server.js 中使用 Graphql 查询时出错
- python - 对 Python Azure 函数终结点 (Azure AD JWT) 的 HTTP 请求进行身份验证的最佳做法是什么?
- c - 我如何在 vscode 中打开/渲染 .bmp 图像
- javascript - MailChimp 添加订阅者...错误:被 CORS 策略阻止 请求的资源上不存在“Access-Control-Allow-Origin”标头
- javascript - 如何在 iframe.setAttributes 下设置图像 alt 标签
- decompiler - Windev 软件反编译器问题
- reactjs - 运行带有权限错误的 npm 命令时出错
- javascript - 直接在 DOM 中使用 onsubmit 与从 JavaScript 访问它有什么区别?