1

プロジェクトのために、プログラムが検索して一連の文字を見つけようとするシーケンスを指定しました。見つかった場合は、それらのシーケンスを大文字にして行を出力します。

たとえばbcdaaab、プログラムを実行し、aa検索対象として文字列を指定すると、

印刷する必要があるのは: 印刷されるのbcdAAAb
は: bcdAAab(3 番目aはキャップされていないことに注意してください)。

これは、replaceAll大文字と小文字を区別しない文字列の関数を使用しているためです。検索時に大文字と小文字を区別しないようにする方法があるかどうか知りたいです。まったく使用できない場合replaceAll、誰かが他のアルゴリズムを提案できますか?

4

3 に答える 3

1

あなたが遭遇している問題は、大文字と小文字を区別しない一致でも、最初の「aa」を置き換えてから、元の置換の後に始まる次の一致を検索することです。置換後の次の位置は、単一の「a」の後に別の文字が続くため、一致とは見なされません。

これはあなたの問題を処理します:

"bcdaaab".replaceAll("(?i)a((?=a)|(?<=a))","A");

「aa」を「AA」に置き換える代わりに、これを使用して一度に 1 つの「a」を置き換えます。先読みと後読みを利用して、基本的に「私の隣に別の「a」はありますか?」と言います。


何らかの理由でそれをしたくない場合は、いつでもwhile(matcher.find(offset))ループを実行できます。

于 2013-09-20T02:36:42.993 に答える