用于字符串中多个匹配项的Java indexOf方法

用于字符串中多个匹配项的Java indexOf方法,java,indexof,Java,Indexof,我有一个关于indexOf方法的问题。我想在一个字符串中找到多个“X”的大小写 假设我的字符串是“x是x是x是x”,我想在它的所有索引位置找到x。 但是,在多种情况下,如何做到这一点?这在indexOf中可能吗 我做了int temp=str.indexOf('x'); 它找到了第一个x。我试着做一个for循环,在这里我被初始化为字符串的长度,但这不起作用,因为我一直在一遍又一遍地寻找第一个x for (int y = temp1; y >= 0;y-- ) { int temp

我有一个关于indexOf方法的问题。我想在一个字符串中找到多个“X”的大小写

假设我的字符串是“x是x是x是x”,我想在它的所有索引位置找到x。 但是,在多种情况下,如何做到这一点?这在indexOf中可能吗

我做了int temp=str.indexOf('x'); 它找到了第一个x。我试着做一个for循环,在这里我被初始化为字符串的长度,但这不起作用,因为我一直在一遍又一遍地寻找第一个x

for (int y = temp1; y >= 0;y-- ) 
{
    int temp = str.indexOf('x');
    System.out.println(temp);
}
但这是行不通的。我应该用正则表达式吗?因为我真的不知道如何使用正则表达式方法


任何帮助都将不胜感激,谢谢

还有另一个版本的
indexOf
方法,将
fromIndex
作为参数。
因此,您可以在循环中调用它,每次将
prevPosition+1
作为第二个参数传递

i = str.indexOf('x');
while(i >= 0) {
     System.out.println(i);
     i = str.indexOf('x', i+1);
}
文档:

您可以使用指定开始索引。因此,在循环中存储“x”的最后一个位置,然后使用该索引+1再次搜索。

还有
indexOf
方法的第二个变体,它将开始索引作为参数

i = str.indexOf('x');
while(i >= 0) {
     System.out.println(i);
     i = str.indexOf('x', i+1);
}

以下是使用Streams API的解决方案:

String text=“让我们搜索E?”;
最终字符key=“e”。字符(0);
int[]索引=IntStream.range(0,text.length())
.filter(i->text.charAt(i)=键)
.toArray();
输出如下:

//1
//6
//16
//1
//6
如果要在结果中添加大写字母,则需要使用以下命令更改
过滤器的参数闭包:

.filter(i->Character.toLowerCase(text.charAt(i))==key)
然后输出将如下所示:

//1
//6
//16
此外,如果您只想使用结果或出于快速测试目的将其打印出来,您可以使用
forEach
终端操作:

IntStream.range(0,text.length())
.filter(i->text.charAt(i)=键)
.forEach(System.out::println);

您希望在特定字符串中找到多个字符。是的,你能做到。您可以使用indexOf方法的重载版本。该网站详细描述了indexOf方法的所有重载版本。。您可以阅读有关Java indexOf方法的详细指南。

啊,非常感谢大家。这很有意义,因为您只需根据上次匹配的位置遍历字符串。这看起来很不错,但如果您能提供一个代码示例,将不胜感激。