3

フレーズ内の単語を検索するJavaメソッドがあり、その単語が見つかった場合は、フレーズから削除されます。単語やフレーズは何でもかまいません。それらはバリアントです。これが私のコードです:

private String removeWord( String phrase, String word ) {
    phrase = phrase.replaceAll( "(?i)" + word , "" );
    return phrase;
}

私が抱えている問題は、このメソッドに渡されるフレーズがあることです。

古代ローマ帝国は非常に広大で、非常に強力で野心的だったため、触れたほとんどすべてのものに強力な影響を及ぼしました。ローマの影響は非常に広範であったため、今日でも、ほとんどの西側諸国の言語、文化、法律、および政府は、ローマのマークを保持しています。

そして、テキストから見つけて削除する単語は「ローマ帝国」ですが、それを削除することはできませんでした。調査の結果、これはフレーズ内のスペースが通常のスペースではなかったことが原因であることがわかりました。Notepad ++でフレーズのテキストをコピーして同じ単語を検索したところ、それも見つかりませんでした。

添付のスクリーンショットを参照してください。5行目は私が手動で書いた行で、ご覧のとおりNotepad ++はそれを見つけることができましたが、1行目で「ローマ帝国」を見つけることができませんでした。ファイルで「ローマ帝国」を数えたところ、一度しか見つかりませんでした。

他の奇妙な空間は何ですか?!

ここに画像の説明を入力してください

-------------------------------------------------- --- >>編集:詳細:

このコードをJavaで記述して、2つのスペースの違いを確認しました。

char a = ' ';
char b = ' ';

System.out.println( (int) a );  // Prints 160
System.out.println( (int) b );  // Prints 32

奇妙なことに、2つのスペースはまったく同じに見えます!

4

1 に答える 1

1

おそらく非改行スペースです。それらを明示的に探すか、検索文字列のスペースを \s (別名 [:space:]) に置き換えることができます。

于 2012-10-04T18:07:24.973 に答える