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);
}
しかし、これは機能しません。私は正規表現を使用するはずですか?正規表現の使い方がわからないから。
どんな助けでも感謝します、ありがとう!
indexOf
メソッドの2番目のバリアントがあり、開始インデックスをパラメーターとして使用します。
i = str.indexOf('x');
while(i >= 0) {
System.out.println(i);
i = str.indexOf('x', i+1);
}
indexOf
メソッドの別のバージョンがあり、fromIndex
をパラメーターとして使用します。
そのため、2番目のパラメーターとしてprevPosition + 1
を渡すたびにループで呼び出すことができます。
ドキュメンテーション:
http://download.Oracle.com/javase/6/docs/api/Java/lang/String.html#indexOf(int、int)
indexOf で開始インデックスを指定できます。したがって、ループで「x」の最後の位置を保存し、そのインデックス+ 1を使用して再度検索します。
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);
特定の文字列から複数の文字を検索したい。はい、できます。オーバーロードされたバージョンのindexOfメソッドを使用できます。ウェブサイトは、indexOfメソッドのすべてのオーバーロードバージョンを詳細に説明しています。 https://www.javaians.com/indexof-Java/ 。 Java indexOfメソッドの詳細ガイドを読むことができます。
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);
}