私は非常に興味深いと思う問題に出くわしました。私は主に正規表現によってテキストファイルの基本的な解析を行っていますが、この行に一致すると常にフリーズします
ftrect 0.7031 57.0313 9.8561 55.5313 "FREIGABE \nQ09_SV01"
例外はスローされません。プログラムがハングするだけです。状況を再現するプログラムのスニペットを投稿しています。コメントされたものは可能な標準的な状況ですが、もう1つは問題があります。\n を削除すると機能しますが、これらの解析済みファイルは「ブラックボックス」システムからこのように取得されます。
私は確かに回避策を講じることができます.実際にフリーズすることだけが興味深いと思い、誰かが何が起こっているのか説明できることを望んでいました. JDK6u22 と JDK7u21 で試してみました...
public static Pattern FTRECT_PATTERN = Pattern.compile(
"\\s*([\\w]+)?\\:?\\s*ftrect\\s+((\\d*\\.?\\d*\\s?)+)\\s*\"?([\\w\\s\\.\\%\\/\\=]*)?\"?\\s*"
);
public static void main(String[] args) {
// Matcher m = FTRECT_PATTERN.matcher( "FOX_BACKGROUND: ftrect 46.1719 18.0556 54.8633 16.5556 \"Schicht\" " );
Matcher m = FTRECT_PATTERN.matcher( "ftrect 0.7031 57.0313 9.8561 55.5313 \"FREIGABE \\nQ09_SV01\"" );
System.out.println( m.matches() );
for (int i = 0; i <= m.groupCount(); i++) {
String string = m.group( i );
System.out.println( string );
}
}
\\\\
さて、正規表現をこれに変更すると(最後のグループに追加すると)、次のことがわかりました。
public static Pattern FTRECT_PATTERN = Pattern.compile(
"\\s*([\\w]+)?\\:?\\s*ftrect\\s+((\\d*\\.?\\d*\\s?)+)\\s*\"?([\\w\\\\\\s\\.\\%\\/\\=]*)?\"?\\s*"
);
例外がスローされない理由はまだわかりません。