Ответ 1
Существует второй вариант метода indexOf
, который принимает параметр start-index в качестве параметра.
i = str.indexOf('x');
while(i >= 0) {
System.out.println(i);
i = str.indexOf('x', i+1);
}
У меня возник вопрос о методе 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.
Любая помощь будет оценена, спасибо!
Существует второй вариант метода 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 с потоками 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.