web-dev-qa-db-ja.com

Java Stringの複数の一致に対する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);
}

しかし、これは機能しません。私は正規表現を使用するはずですか?正規表現の使い方がわからないから。

どんな助けでも感謝します、ありがとう!

22
Eric

indexOfメソッドの2番目のバリアントがあり、開始インデックスをパラメーターとして使用します。

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

indexOfメソッドの別のバージョンがあり、fromIndexをパラメーターとして使用します。
そのため、2番目のパラメーターとしてprevPosition + 1を渡すたびにループで呼び出すことができます。

ドキュメンテーション:
http://download.Oracle.com/javase/6/docs/api/Java/lang/String.html#indexOf(int、int)

11
Nikita Rybak

indexOf で開始インデックスを指定できます。したがって、ループで「x」の最後の位置を保存し、そのインデックス+ 1を使用して再度検索します。

5
Rob

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

出力は次のようになります。

//1
//6

結果に大文字を追加する場合は、filterの引数クロージャを次のように変更する必要があります。

.filter(i -> Character.toLowerCase(text.charAt(i)) == key)

次に、出力は次のようになります。

//1
//6
//16

さらに、結果を使用するか、簡単なテスト目的で出力するだけの場合は、forEach端末操作を使用して実行できます。

IntStream.range(0, text.length())
    .filter(i -> text.charAt(i) == key)
    .forEach(System.out::println);
3
Ömer Erden

特定の文字列から複数の文字を検索したい。はい、できます。オーバーロードされたバージョンのindexOfメソッドを使用できます。ウェブサイトは、indexOfメソッドのすべてのオーバーロードバージョンを詳細に説明しています。 https://www.javaians.com/indexof-Java/ 。 Java indexOfメソッドの詳細ガイドを読むことができます。

0
Jakki
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);
}
0
Alameer Kaiser