Sono quasi arrivata alla soluzione. A prescindere dalla consegna dell'esercizio che avevo scritto prima(che è stata modificata), adesso il problema che sorge è che le parole vengono raddoppiate. Se cerco le istanze dello schema "baXYZa", e nella mia lista ho parole come [, [ananas, balena, banana, cane, cavallo, cena, dado]l'OUTPUT è [balena, balena, balena, banana, banana, banana], mentre la soluzione giusta è [balena, banana].
Mentre se cerco le istanze di "cXYZ" ho in output [cane,cena] (che è giusto, e non capisco come mai certe volte funziona e altre no, non riesco a trovare l'errore).
public Operazioni ricerca(String schema) throws IOException{
String elemento = null;
int i =1;
int k=0;
ArrayList<String> lista = new ArrayList<String>();
String patternSchema = schema;
int lunghezzaSchema = patternSchema.length();
for( i = 1; i< this.listaParoleArray.size();i++) {
int lunghezzaElemento = this.listaParoleArray.get(i).length();
elemento = this.listaParoleArray.get(i);
boolean lunghezzaUguale = (lunghezzaElemento == lunghezzaSchema);
if ( lunghezzaUguale) {
for ( k = 0; k < patternSchema.length();k++) {
char letteraSchema = patternSchema.charAt(k);
char letteraElemento = elemento.charAt(k);
if(Character.isUpperCase(letteraSchema)){
char letteraMaiuscola = letteraSchema;
int pos = patternSchema.indexOf(letteraSchema);
for (int y = pos+1; y < patternSchema.length(); y++) {
if(letteraMaiuscola == patternSchema.charAt(y)){
int pos2 = patternSchema.indexOf(patternSchema.charAt(y));
if(elemento.charAt(pos) == elemento.charAt(pos2))
lista.add(elemento);
}
}
} else if (Character.isLowerCase(letteraSchema)){
if(letteraSchema == letteraElemento)
lista.add(elemento);
}
}
}
}
this.listaParoleArray = lista;
return new Operazioni();
}