Substring searching is one of the most prominent problems in computer science. We described and compared with each other by now well-known approaches to the solution. Algorithms were classified according to their properties, such as number of patterns and the direction in which the comparisons are performed. We examined the main idea, advantages and time complexity for each algorithm. Some basic algorithms, which are searching for exactly one pattern, were implemented in Java and tested on a practical example. We picked the fastest one among them.