我有一个关于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
方法有第二种变体,它将start-index作为参数。
i = str.indexOf('x');
while(i >= 0) {
System.out.println(i);
i = str.indexOf('x', i+1);
}
还有另一个版本的indexOf
方法,以fromIndex
为参数。
因此,您可以在循环中调用它,每次都将prevPosition + 1
作为第二个参数传递。
文档: http://download.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf(int, int)
您可以使用indexOf指定起始索引。因此,在循环中存储“x”的最后位置,然后使用该索引+ 1再次搜索。
对于不同的方法,你可以在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);
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);
}
您想要在特定字符串中查找多个字符。是的,你可以这样做。您可以使用indexOf方法的重载版本。网站详细描述了indexOf方法的所有重载版本.https://www.javaians.com/indexof-java/。您可以阅读有关Java indexOf方法的详细指南。