我对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);
}
但这不起作用。我应该使用正则表达式吗?因为我真的不知道如何使用正则表达式方法。
任何帮助将不胜感激,谢谢!
答案 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方法的详细指南。