"((\\-)?[0-9]+(.([0-9])+)? )+"
それぞれが単一のスペースで区切られた数列に一致する必要があるこの正規表現があります。たとえば、「5 4 1 22.437.8」または「541 22.48.0017.8」。
文字列が正規表現と一致するかどうかを確認するには、次のようにします。
if((value+" ").matches("((\\-)?[0-9]+(.([0-9])+)? )+")){
// anything
}
上記の例のようにこの小さな文字列を指定すると、完全に機能します。ただし、「2000000 2000000 2000000 2000000 2000000 2000000 2000000 2000000」のような長い文字列の場合、一致する場合は完全に機能しますが、一致しない場合は最大5秒かかります。これをチェックして:
String value = "2000000 2000000 2000000 2000000 2000000 2000000 2000000 2000000 h";
System.out.println("Start: "+System.currentTimeMillis());
if((value+" ").matches("((\\-)?[0-9]+(.([0-9])+)? )+")){
System.out.println("OK");
}else{
System.out.println("NOK");
}
System.out.println("End: "+System.currentTimeMillis());
これには最大5秒かかります!! 一方、文字列の末尾から「h」を削除した場合、1ミリ秒未満かかります。
何か案は?