/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.regex.*;
import java.util.stream.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
String testString
= "a b c d ab ac ad da ca ba d e b z s aa"; long startTime;
String[] keywords
= {"a",
"ab",
"ad",
"c",
"d",
"j",
"k",
"sz",
"hk",
"ok"}; List
<Pattern
> patterns
= Arrays.
asList(keywords
).
stream().
map(keyword
-> Pattern.
compile("\\b"+keyword
+"\\b")).
collect(Collectors.
toList()); startTime
= System.
nanoTime(); for (Pattern p : patterns) {
Matcher m = p.matcher(testString);
while (m.
find()) { System.
out.
println(m.
group()); } }
System.
out.
printf("Took %s ms%n",
(System.
nanoTime() - startTime
) / 1000);
Pattern multiPattern = Pattern.compile("\\b(a[bd]?|c|d|j|[oh]?k|sz)\\b");
startTime
= System.
nanoTime(); Matcher m = multiPattern.matcher(testString);
while (m.
find()) { System.
out.
println(m.
group()); } System.
out.
printf("Took %s ms%n",
(System.
nanoTime() - startTime
) / 1000); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnV0aWwucmVnZXguKjsKaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uKjsKCi8qIE5hbWUgb2YgdGhlIGNsYXNzIGhhcyB0byBiZSAiTWFpbiIgb25seSBpZiB0aGUgY2xhc3MgaXMgcHVibGljLiAqLwpjbGFzcyBJZGVvbmUKewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CgkJU3RyaW5nIHRlc3RTdHJpbmcgPSAiYSBiIGMgZCBhYiBhYyBhZCBkYSBjYSBiYSBkIGUgYiB6IHMgYWEiOwoJCWxvbmcgc3RhcnRUaW1lOwoJCQoJCQoJCVN0cmluZ1tdIGtleXdvcmRzID0geyJhIiwgImFiIiwgImFkIiwgImMiLCAiZCIsICJqIiwgImsiLCAic3oiLCAiaGsiLCAib2sifTsKCQlMaXN0PFBhdHRlcm4+IHBhdHRlcm5zID0gQXJyYXlzLmFzTGlzdChrZXl3b3Jkcykuc3RyZWFtKCkubWFwKGtleXdvcmQgLT4gUGF0dGVybi5jb21waWxlKCJcXGIiK2tleXdvcmQrIlxcYiIpKS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOwoJCXN0YXJ0VGltZSA9IFN5c3RlbS5uYW5vVGltZSgpOwoJCWZvciAoUGF0dGVybiBwIDogcGF0dGVybnMpIHsKCQkJTWF0Y2hlciBtID0gcC5tYXRjaGVyKHRlc3RTdHJpbmcpOwoJCQl3aGlsZSAobS5maW5kKCkpIHsgU3lzdGVtLm91dC5wcmludGxuKG0uZ3JvdXAoKSk7IH0KCQl9CgkJU3lzdGVtLm91dC5wcmludGYoIlRvb2sgJXMgbXMlbiIsIChTeXN0ZW0ubmFub1RpbWUoKSAtIHN0YXJ0VGltZSkgLyAxMDAwKTsKCQkKCQlQYXR0ZXJuIG11bHRpUGF0dGVybiA9IFBhdHRlcm4uY29tcGlsZSgiXFxiKGFbYmRdP3xjfGR8anxbb2hdP2t8c3opXFxiIik7CgkJc3RhcnRUaW1lID0gU3lzdGVtLm5hbm9UaW1lKCk7CgkJTWF0Y2hlciBtID0gbXVsdGlQYXR0ZXJuLm1hdGNoZXIodGVzdFN0cmluZyk7CgkJd2hpbGUgKG0uZmluZCgpKSB7IFN5c3RlbS5vdXQucHJpbnRsbihtLmdyb3VwKCkpOyB9CgkJU3lzdGVtLm91dC5wcmludGYoIlRvb2sgJXMgbXMlbiIsIChTeXN0ZW0ubmFub1RpbWUoKSAtIHN0YXJ0VGltZSkgLyAxMDAwKTsKCX0KfQ==