java implementation of popular string matching algorithms such as KMP, Boyer Moore, and Rabin Karp