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

时间:2011-02-14 01:05:34

标签: 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 = str.indexOf('x');
    System.out.println(temp);
}

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

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

6 个答案:

答案 0 :(得分:41)

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

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

答案 1 :(得分:10)

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

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

答案 2 :(得分:5)

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

答案 3 :(得分: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);

答案 4 :(得分: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);
}

答案 5 :(得分:0)

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