La mejor manera de encontrar una subcadena en una cadena

Tengo un problema en el que intento buscar una subcadena en la cadena. Esa subcadena puede o no estar en la cadena.

str = "hello how are you?"
substr = "how are"

Dos formas que sé si se pueden hacer son:

string.indexOf("how are")regex

Pero, ¿hay alguna otra forma "optimizada"? ¿Qué habrías hecho?

¿Puede Ruby proporcionar una mejor respuesta? Como usamos jRuby, la respuesta puede estar en Ruby o Java.

Respuestas a la pregunta(6)

Su respuesta a la pregunta