Метод Java indexOf для нескольких совпадений в строке
У меня был вопрос о методе indexOf. Я хочу найти несколько случаев " X " в строке.
предположим, что моя строка "x is x is x is 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);
}
но это не работает. Я должен использовать regex? Потому что я действительно не знаю, как использовать regex метод.
любая помощь будет оценили, спасибо!
5 ответов
существует второй вариант indexOf
метод, который принимает начальный индекс в качестве параметра.
i = str.indexOf('x');
while(i >= 0) {
System.out.println(i);
i = str.indexOf('x', i+1);
}
есть еще одна версия indexOf
метод, взяв fromIndex
в качестве параметра.
Таким образом, вы можете вызвать его в цикле, каждый раз проходя prevPosition + 1
как второй параметр.
Documentation:
http://download.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf(int, int)
вы можете указать начальный индекс с indexOf. Итак, в вашем цикле вы сохраняете последнюю позицию "x", а затем снова выполняете поиск, используя этот индекс + 1.
для другого подхода здесь вы можете сделать это в java 8 с 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);
}