0

" "次の問題が発生しています。アプリケーションのどこかにチェックしたい文字列があります。チェックは、この文字列に(空白)/nとは異なる文字が含まれているかどうかです/r 。次に例を示します。

  • " g" -含まれています
  • " /n " -含まれていません
  • " " -含まれていません

reg式で実行したいのですが、一般的なパターンは使用したくありません。.*[a-zA-Z0-9]+.* .代わりに、のようなものが必要です.*[!" ""/n"/r"]" " "/r"(およびとは異なるすべての文字"n")。

私の問題はそれです

  1. このパターンが有効かどうかはわかりません(上記は機能していません)
  2. 通常のStringsメソッドを使用するよりもはるかに高速であるかどうかはわかりません。
4

2 に答える 2

2

まず、とを意味\n\rます。Javaでは、これはバックスラッシュもとでエスケープすることを意味し\\nます\\r

次に、空白以外をキャッチするだけの場合は、パターン\\S*またはを使用します[^\\s]\S非空白、または\s空白であり、 [^<charset>]「これらのいずれでもないものと一致する」ことを意味します。

第3に、これが繰り返しチェックされる場合は、必ず正規表現を1回だけコンパイルしてから、複数回使用してください。

第4に、プロファイリングの通常の戦略に従います。まず、これはアプリケーションの重要な部分にありますか?もしそうなら、あなた自身をベンチマークします。

于 2013-01-08T18:19:04.740 に答える
1

これはあなたが望むことを正確に実行するものですが、(私が上で言ったように)、それは文字をより速く通過するでしょう:

Pattern NOT_WHITESPACE_DETECTOR = Pattern.compile("[^ \\n\\r]");
Matcher m = NOT_WHITESPACE_DETECTOR.matcher("  \n       \r      bla        ");
if (m.find()) {
   //string contains a non-white-space
}

また、Javaでの空白の定義は、指定したものよりもはるかに広いことに注意してください。それでも、Javaが検出しないUnicodeの空白があります(ただし、検出するライブラリがあります)。

于 2013-01-08T18:12:39.663 に答える