Prima cosa:
String compara;
compara=new String();
compara=Libreria[i].substring(0, ricerca.length());
è un crimine contro l'umanità. Scrivi
String compara=Libreria[i].substring(0, ricerca.length());
Seconda cosa
if (compara.equalsIgnoreCase(ricerca) == true)
si scrive come
if (compara.equalsIgnoreCase(ricerca))
"==true" è ridondante, superfluo e può portare a errori sottil.
Terzo, se vuoi un aiuto concreto posta il codice giusto o la stacktrace, perchè dal codice che hai postato non si capisce nulla.
Comunque provo a guardare nella sfera magica.
Secondo me Libreria[4] contiene una stringa più corta della sottostringa che stai cercando di estrarre da essa.
PS: In Java è convenzione che un identificatore di variabile inizi con una lettera minuscola, per cui anzichè "Libreria" l'array dovrebbe essere chiamato "libreria" con la elle iniziale minuscola.