метод java indexof для нескольких совпадений в строке

<p>у меня возник вопрос по поводу метода indexof. я хочу найти несколько случаев "x" в строке.</p><p>предположим, что моя строка: «x - это x, это x - это x», я хочу найти x во всех позициях индекса .. но как это сделать для нескольких случаев? это возможно даже с indexof?</p><p>я сделал int temp = str.indexof ('x'); он нашел первый x. я попытался сделать цикл for, где я инициализируется на длину строки, и это не сработало, так как я продолжал находить первый x снова и снова.</p><pre><code>for (int y = temp1; y >= 0;y-- ) { int temp = str.indexof('x'); system.out.println(temp); } </code></pre><p>но это не работает. я должен использовать регулярные выражения? потому что я действительно не знаю, как использовать метод регулярных выражений.</p><p>любая помощь будет оценена, спасибо!</p>

<p>существует второй вариант метода <code>indexof</code>, который принимает стартовый индекс в качестве параметра.</p><pre><code>i = str.indexof('x'); while(i >= 0) { system.out.println(i); i = str.indexof('x', i+1); } </code></pre>

<p>есть еще одна версия метода <code>indexof</code>, принимающая <code>fromindex</code> в качестве параметра.<br> таким образом, вы можете вызывать его в цикле, каждый раз передавая <code>prevposition + 1</code> в качестве второго параметра.</p><p>документация:<br> <a href="http://download.oracle.com/javase/6/docs/api/java/lang/string.html#indexof%28int,%20int%29">http://download.oracle.com/javase/6/docs/api/java/lang/string.html#indexof(int, int)</a> </p>

<p>вы можете указать начальный индекс с помощью <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/string.html#indexof%28int,%20int%29">indexof</a> . итак, в вашем цикле вы сохраняете последнюю позицию 'x', а затем ищите снова, используя этот индекс + 1.</p>

<p>для другого подхода здесь вы можете сделать это в java 8 с потоками api,</p><pre><code>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 </code></pre><p>если вы хотите найти заглавную букву "e" с заглавной буквой "e", вы можете просто изменить аргумент фильтра с помощью:</p><pre><code>.filter(i -> character.tolowercase(text.charat(i)) == key) </code></pre><p>вывод будет:</p><pre><code>//1 //6 //16 </code></pre><p>кроме того, если вы не хотите собирать в массив, если вы просто хотите распечатать его для быстрого тестирования, вы можете сделать это с помощью: </p><pre><code>intstream.range(0, text.length()) .filter(i -> text.charat(i) == key) .foreach(system.out::println); </code></pre>

<pre><code>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); } </code></pre>