A idéia do algoritmo é criar uma lista com possíveis homônimos (para duplicidade de cadastros devido a erro de digitação), para busca em SQL em um sistema, estou com problema na geração destas possíveis palavras, o algoritmo abaixo traz o exemplo de gonsalves, a idéia é que ele produza.: gonsalves, jonsalves, gunsalves, junsalves, gomsalves, jumsalves, … . Seria uma facilidade para busca em banco de dados, já que os mesmos não aceitam regex ou pelo menos desconheço um meio. A lista de caracteres a substituir virá de um banco de dados e não de um List como no algoritmo abaixo. Alguém poderia me dar uma mão? O algoritmo abaixo está produzindo letras duplicadas e faltando letras no percorrer da palavra. O que estou fazendo de errado? Tentei de diversas formas.
Classe Main.java
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Homonimo> homonimos = new ArrayList();
homonimos.add(new Homonimo("s", "ss"));
homonimos.add(new Homonimo("s", "ç"));
homonimos.add(new Homonimo("s", "z"));
homonimos.add(new Homonimo("s", "sc"));
homonimos.add(new Homonimo("s", "s"));
homonimos.add(new Homonimo("ç", "s"));
homonimos.add(new Homonimo("ç", "ss"));
homonimos.add(new Homonimo("ç", "ç"));
homonimos.add(new Homonimo("ç", "z"));
homonimos.add(new Homonimo("ç", "sc"));
homonimos.add(new Homonimo("z", "s"));
homonimos.add(new Homonimo("z", "ss"));
homonimos.add(new Homonimo("z", "ç"));
homonimos.add(new Homonimo("z", "z"));
homonimos.add(new Homonimo("z", "sc"));
homonimos.add(new Homonimo("l", "ll"));
homonimos.add(new Homonimo("l", "u"));
homonimos.add(new Homonimo("l", "l"));
homonimos.add(new Homonimo("u", "l"));
homonimos.add(new Homonimo("u", "ll"));
homonimos.add(new Homonimo("u", "u"));
homonimos.add(new Homonimo("v", "w"));
homonimos.add(new Homonimo("v", "v"));
homonimos.add(new Homonimo("o", "o"));
homonimos.add(new Homonimo("o", "u"));
homonimos.add(new Homonimo("u", "u"));
homonimos.add(new Homonimo("u", "o"));
homonimos.add(new Homonimo("g", "g"));
homonimos.add(new Homonimo("g", "j"));
homonimos.add(new Homonimo("j", "j"));
homonimos.add(new Homonimo("j", "g"));
homonimos.add(new Homonimo("m", "m"));
homonimos.add(new Homonimo("m", "mm"));
homonimos.add(new Homonimo("m", "n"));
homonimos.add(new Homonimo("n", "n"));
homonimos.add(new Homonimo("n", "m"));
homonimos.add(new Homonimo("n", "nn"));
homonimos.add(new Homonimo("i", "i"));
homonimos.add(new Homonimo("i", "y"));
homonimos.add(new Homonimo("y", "i"));
homonimos.add(new Homonimo("y", "y"));
String homonimo = "gonsalves";
List<String> hs = new ArrayList();
String palavra = "";
String palavraParcial = "";
hs.add(homonimo);
for (int i = 0; i < homonimo.length(); i++) {
for (Homonimo h : homonimos) {
if (h.caracter.equals(homonimo.charAt(i) + "")) {
int tam = hs.size();
for (int j = 0; j < tam; j++) {
palavraParcial = hs.get(j).substring(0, i);
palavraParcial += h.valor;
if ((hs.get(j).length() - i) <= 0) {
if (h.valor.length() == 2) {
palavraParcial += hs.get(j).substring(i + (hs.get(j).length() - i) + 2, homonimo.length());
} else {
palavraParcial += hs.get(j).substring(i + (hs.get(j).length() - i) + 1, homonimo.length());
}
} else {
palavraParcial += hs.get(j).substring(i + 1, homonimo.length());
}
System.out.println(palavraParcial);
hs.add(palavraParcial);
}
}
for (int l = 0; l < hs.size(); l++) {
palavra = hs.get(l);
int k = l;
int tam = hs.size();
while (k < tam) {
k++;
if (k < hs.size()) {
if (palavra.equals(hs.get(k).toString())) {
k--;
tam--;
hs.remove(k);
}
}
}
}
}
System.out.println(hs);
System.out.println(hs.size());
}
System.out.println(hs);
System.out.println(hs.size());
}
}
Classe Homonimo.java
public class Homonimo {
String caracter;
String valor;
public Homonimo(String caracter, String valor) {
this.caracter = caracter;
this.valor = valor;
}
public String getCaracter() {
return caracter;
}
public void setCaracter(String caracter) {
this.caracter = caracter;
}
public String getValor() {
return valor;
}
public void setValor(String valor) {
this.valor = valor;
}
}
Saída
[gonsalves, jonsalves, gunsalves, junsalves, gomsalves, jomsalves, gumsalves, jumsalves, gonssavve, jonssavve, gunssavve, junssavve, gomssavve, …
Utilizando Netbeans, JDK 7.