/* http://stackoverflow.com/a/33809099/5290909 */
import java.util.* ;
import java.lang.* ;
import java.io.* ;
import java.util.regex.* ;
class Ideone
{
{
String text
= "aaaaaaaaaaaaaa bbbbbbbbbbbbbb ccccccccccccccccc dddddddddddddddddddddddddddddd eeeeeeeeeeeeeeeeeeeeeee fffffffffffffffffffffffffffff" ; Pattern kleene = Pattern.compile ( pattern1) ;
Pattern possessive = Pattern.compile ( pattern2) ;
Matcher mKleene = kleene.matcher ( text) ;
Matcher mPoss = possessive.matcher ( text) ;
int loops = 20000 ;
//Benchmark
for ( int j= 0 ; j< 3 ; j++ )
{
for ( int i= 0 ; i< 4 ; i++ )
{
long before
= System .
nanoTime ( ) ; for ( int n= 0 ; n< loops; n++ )
{
mPoss.find ( ) ;
mPoss.reset ( ) ;
}
long after
= System .
nanoTime ( ) ; if ( j> 0 )
{
System .
out .
println ( "Possessive : " + ( after
- before
) / 1e6
+ " ms" ) ; }
}
for ( int i= 0 ; i< 4 ; i++ )
{
long before
= System .
nanoTime ( ) ; for ( int n= 0 ; n< loops; n++ )
{
mKleene.find ( ) ;
mKleene.reset ( ) ;
}
long after
= System .
nanoTime ( ) ; if ( j> 0 )
{
System .
out .
println ( "Kleene : " + ( after
- before
) / 1e6
+ " ms" ) ; }
}
}
}
}
LyogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzM4MDkwOTkvNTI5MDkwOSAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnV0aWwucmVnZXguKjsKCmNsYXNzIElkZW9uZQp7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKICAgICAgICBTdHJpbmcgdGV4dCA9ICJhYWFhYWFhYWFhYWFhYSBiYmJiYmJiYmJiYmJiYiBjY2NjY2NjY2NjY2NjY2NjYyBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQgZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUgZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiOwogICAgICAgIFN0cmluZyBwYXR0ZXJuMSA9ICIuKiI7CiAgICAgICAgU3RyaW5nIHBhdHRlcm4yID0gIi4qKyI7CiAgICAgICAgUGF0dGVybiBrbGVlbmUgPSBQYXR0ZXJuLmNvbXBpbGUocGF0dGVybjEpOwogICAgICAgIFBhdHRlcm4gcG9zc2Vzc2l2ZSA9IFBhdHRlcm4uY29tcGlsZShwYXR0ZXJuMik7CiAgICAgICAgTWF0Y2hlciBtS2xlZW5lID0ga2xlZW5lLm1hdGNoZXIodGV4dCk7CiAgICAgICAgTWF0Y2hlciBtUG9zcyA9IHBvc3Nlc3NpdmUubWF0Y2hlcih0ZXh0KTsKICAgICAgICBpbnQgbG9vcHMgPSAyMDAwMDsKIAogICAgICAgIAogICAgICAgIAogICAgICAgIC8vQmVuY2htYXJrCiAgICAgICAgZm9yIChpbnQgaj0wOyBqPDM7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTw0OyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGxvbmcgYmVmb3JlID0gU3lzdGVtLm5hbm9UaW1lKCk7CiAgICAgICAgICAgICAgICBmb3IgKGludCBuPTA7IG48bG9vcHM7IG4rKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBtUG9zcy5maW5kKCk7CiAgICAgICAgICAgICAgICAgICAgbVBvc3MucmVzZXQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxvbmcgYWZ0ZXIgPSBTeXN0ZW0ubmFub1RpbWUoKTsKICAgICAgICAgICAgICAgIGlmIChqPjApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQb3NzZXNzaXZlIDogIiArIChhZnRlci1iZWZvcmUpLzFlNiArICIgbXMiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8NDsgaSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBsb25nIGJlZm9yZSA9IFN5c3RlbS5uYW5vVGltZSgpOwogICAgICAgICAgICAgICAgZm9yIChpbnQgbj0wOyBuPGxvb3BzOyBuKyspCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbUtsZWVuZS5maW5kKCk7CiAgICAgICAgICAgICAgICAgICAgbUtsZWVuZS5yZXNldCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbG9uZyBhZnRlciA9IFN5c3RlbS5uYW5vVGltZSgpOwogICAgICAgICAgICAgICAgaWYgKGo+MCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIktsZWVuZSAgOiAiICsgKGFmdGVyLWJlZm9yZSkvMWU2ICsgIiBtcyIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9