Подтвердить что ты не робот

Метод Java indexOf для нескольких совпадений в String

У меня возник вопрос о методе 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.

Любая помощь будет оценена, спасибо!

4b9b3361

Ответ 1

Существует второй вариант метода indexOf, который принимает параметр start-index в качестве параметра.

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

Ответ 2

Существует еще одна версия метода indexOf, принимающая fromIndex как параметр.
Таким образом, вы можете вызвать его в цикле, каждый раз передавая prevPosition + 1 в качестве второго параметра.

Документация:
http://download.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf (int, int)

Ответ 3

Вы можете указать начальный индекс с indexOf. Итак, в вашем цикле вы сохраняете последнюю позицию "x", затем снова выполняете поиск с помощью этого индекса + 1.

Ответ 4

Для другого подхода вы можете сделать это в 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);

Ответ 5

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);
}

Ответ 6

Вы хотите найти несколько символов в определенной строке. Да, вы можете сделать это. Вы можете использовать перегруженную версию метода indexOf. Сайт подробно описал все перегруженные версии методов indexOf. https://www.javaians.com/indexof-java/. Вы можете прочитать подробное руководство по методу Java indexOf.