用于String中多个匹配的Java indexOf方法

问题描述 投票:18回答:6

我有一个关于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);
}

但这不起作用。我应该使用正则表达式吗?因为我真的不知道如何使用正则表达式方法。

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

java indexof
6个回答
42
投票

indexOf方法有第二种变体,它将start-index作为参数。

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

10
投票

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

文档: http://download.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf(int, int)


5
投票

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


2
投票

对于不同的方法,你可以在java 8中使用streams api,

String text = "Lets search for E ?";

final char key = "e".charAt(0);
int[] indices = IntStream.range(0, text.length())
                         .filter(i -> text.charAt(i) == key)
                         .toArray();
//output 
//1
//6

如果你想找到带有小写字母“e”的大写字母“E”,你可以用以下方法更改过滤器的参数:

.filter(i -> Character.toLowerCase(text.charAt(i)) == key)

输出将是:

//1
//6
//16

此外,如果你不想收集数组,如果你只是想打印出来以便快速测试,你可以这样做:

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

0
投票
String name = "alameer kaiser aziz";
String found = "a";
int num = name.indexOf(found);
while (num >=0) {
    System.out.println(num);
    num = name.indexOf(found,num+1);
}

0
投票

您想要在特定字符串中查找多个字符。是的,你可以这样做。您可以使用indexOf方法的重载版本。网站详细描述了indexOf方法的所有重载版本.https://www.javaians.com/indexof-java/。您可以阅读有关Java indexOf方法的详细指南。

© www.soinside.com 2019 - 2024. All rights reserved.