Pochi giorni fa, sul forum dedicato agli applicativi Office, mi è stato suggerito da Anthony un codice che permetteva di ricavare tutte le parole possibili, dato un numero di lettere, e di confrontarle con un dizionario caricato su un foglio excel
http://www.pc-facile.com/forum/viewtopic.php?f=26&t=109085&p=640255#p640269
Ora sto cercando di tradurlo in java, volendo imparare questo linguaggio di cui neofita.
Ho scritto questo codice:
- Codice: Seleziona tutto
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.lang.*;
public class Legge {
public static void main(String [] args) throws FileNotFoundException, IOException {
// TODO Auto-generated method stub
int Quante = -1;
int wLen = 0;
boolean isAnagramma;
String strCerca = new String("OCSA");
String cW = new String("");
// Array
String[] dizionario = new String[1000000];
BufferedReader reader = new BufferedReader(new FileReader("dizionario.txt"));
String Parola = reader.readLine();
while(Parola!=null) {
Parola = reader.readLine();
if (Parola!=null) {
dizionario[++Quante] = Parola.toUpperCase();
}
}
reader.close();
wLen=strCerca.length();
for (int k = 0; k <= Quante; k++)
{
if (dizionario[k].length()==wLen)
{
cW = dizionario[k];
isAnagramma = true;
if (strCerca.length() == cW.length())
{
//verifica anagramma
for (int i = 0; i < strCerca.length(); i++)
{
char c = strCerca.charAt(i);
int indice = cW.indexOf(c);
if(indice >= 0)
{
cW = cW.substring(0,indice) + cW.substring(indice+1);
}
else
{
isAnagramma = false;
break;
}
}
}
if (isAnagramma)
{
System.out.println("Trovato " + dizionario[k]);
}
}
}
System.out.println("Finito");
}
}
che carica il dizionario in memoria e poi ricerca tutte le parole che si possono comporre con delle lettere date (per esempio OCSA)
Ora dovrei implementare una funzione che, data una stringa di caratteri ("ABCOA") ed un numero compreso tra 2 e la lunghezza massima della stringa (in questo caso 5), mi estragga tutte le combinazioni possibili (anche senza senso) componibili con le "x" lettere della stringa.
Per esempio con 3 dovrei ottenere:
abc, abo, aba, acb, aco, aca, aoa, bco,bca,bac,bao,baa,boa,coa,cab,cba,cbo,cba (e non so se ce ne sono altre...)
Queste combinazioni le passerei alla routine già fatta per confrontarne la presenza nel dizionario.
Sapreste darmi qualche suggerimento ?
Grazie