Good afternoon, I'm adapting this code to make the search based on an automaton. The automaton will search for dates in the source codes of web pages and will display those dates on the console. This is a java lang error on line 122 of the package buscapadraoweb.
package buscapadraoweb;
import buscaweb.CapturaRecursosWeb;
import java.util.ArrayList;
public class Main {
// busca char em vetor e retorna indice
public static int get_char_ref (char[] vet, char ref ){
for (int i=0; i<vet.length; i++ ){
if (vet[i] == ref){
return i;
}
}
return -1;
}
// busca string em vetor e retorna indice
public static int get_string_ref (String[] vet, String ref ){
for (int i=0; i<vet.length; i++ ){
if (vet[i].equals(ref)){
return i;
}
}
return -1;
}
//retorna o próximo estado, dado o estado atual e o símbolo lido
public static int proximo_estado(char[] alfabeto, int[][] matriz,int estado_atual,char simbolo){
int simbol_indice = get_char_ref(alfabeto, simbolo);
if (simbol_indice != -1){
return matriz[estado_atual][simbol_indice];
}else{
return -1;
}
}
public static void main(String[] args) {
//instancia e usa objeto que captura código-fonte de páginas Web
CapturaRecursosWeb crw = new CapturaRecursosWeb();
crw.getListaRecursos().add("http://www.mercadolivre.com");
ArrayList<String> listaCodigos = crw.carregarRecursos();
String codigoHTML = listaCodigos.get(0);
//mapa do alfabeto
char[] alfabeto = new char[11];
alfabeto[0] = '-';
alfabeto[1] = '0';
alfabeto[2] = '1';
alfabeto[3] = '2';
alfabeto[4] = '3';
alfabeto[5] = '4';
alfabeto[6] = '5';
alfabeto[7] = '6';
alfabeto[8] = '7';
alfabeto[9] = '8';
alfabeto[10] = '9';
//mapa de estados
String[] estados = new String[10];
estados[0] = "q0";
estados[1] = "q1";
estados[2] = "q3";
estados[3] = "q4";
estados[4] = "q5";
estados[5] = "q6";
estados[6] = "q7";
estados[7] = "q8";
estados[8] = "q9";
estados[9] = "q10";
String estado_inicial = "q0";
//estados finais
String[] estados_finais = new String[1];
estados_finais[0] = "q10";
//tabela de transição de AFD para reconhecimento números de dois dígitos
int[][] matriz = new int[3][11];
//transições de q0
matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '0')] = get_string_ref(estados, "q1");
matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '1')] = get_string_ref(estados, "q1");
matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '2')] = get_string_ref(estados, "q1");
matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '3')] = get_string_ref(estados, "q1");
matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '4')] = get_string_ref(estados, "q1");
matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '5')] = get_string_ref(estados, "q1");
matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '6')] = get_string_ref(estados, "q1");
matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '7')] = get_string_ref(estados, "q1");
matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '8')] = get_string_ref(estados, "q1");
matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '9')] = get_string_ref(estados, "q1");
//transições de q1
matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '0')] = get_string_ref(estados, "q2");
matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '1')] = get_string_ref(estados, "q2");
matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '2')] = get_string_ref(estados, "q2");
matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '3')] = get_string_ref(estados, "q2");
matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '4')] = get_string_ref(estados, "q2");
matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '5')] = get_string_ref(estados, "q2");
matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '6')] = get_string_ref(estados, "q2");
matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '7')] = get_string_ref(estados, "q2");
matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '8')] = get_string_ref(estados, "q2");
matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '9')] = get_string_ref(estados, "q2");
//transições de q2
matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '0')] = get_string_ref(estados, "q3");
matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '1')] = get_string_ref(estados, "q3");
matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '2')] = get_string_ref(estados, "q3");
matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '3')] = get_string_ref(estados, "q3");
matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '4')] = get_string_ref(estados, "q3");
matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '5')] = get_string_ref(estados, "q3");
matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '6')] = get_string_ref(estados, "q3");
matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '7')] = get_string_ref(estados, "q3");
matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '8')] = get_string_ref(estados, "q3");
matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '9')] = get_string_ref(estados, "q3");
//transições de q3
matriz[get_string_ref(estados, "q3")][get_char_ref(alfabeto, '0')] = get_string_ref(estados, "q4");
matriz[get_string_ref(estados, "q3")][get_char_ref(alfabeto, '1')] = get_string_ref(estados, "q4");
matriz[get_string_ref(estados, "q3")][get_char_ref(alfabeto, '2')] = get_string_ref(estados, "q4");
matriz[get_string_ref(estados, "q3")][get_char_ref(alfabeto, '3')] = get_string_ref(estados, "q4");
matriz[get_string_ref(estados, "q3")][get_char_ref(alfabeto, '4')] = get_string_ref(estados, "q4");
matriz[get_string_ref(estados, "q3")][get_char_ref(alfabeto, '5')] = get_string_ref(estados, "q4");
matriz[get_string_ref(estados, "q3")][get_char_ref(alfabeto, '6')] = get_string_ref(estados, "q4");
matriz[get_string_ref(estados, "q3")][get_char_ref(alfabeto, '7')] = get_string_ref(estados, "q4");
matriz[get_string_ref(estados, "q3")][get_char_ref(alfabeto, '8')] = get_string_ref(estados, "q4");
matriz[get_string_ref(estados, "q3")][get_char_ref(alfabeto, '9')] = get_string_ref(estados, "q4");
//transições de q4
matriz[get_string_ref(estados, "q4")][get_char_ref(alfabeto, '-')] = get_string_ref(estados, "q5");
//transições de q5
matriz[get_string_ref(estados, "q5")][get_char_ref(alfabeto, '0')] = get_string_ref(estados, "q6");
matriz[get_string_ref(estados, "q5")][get_char_ref(alfabeto, '1')] = get_string_ref(estados, "q6");
matriz[get_string_ref(estados, "q5")][get_char_ref(alfabeto, '2')] = get_string_ref(estados, "q6");
matriz[get_string_ref(estados, "q5")][get_char_ref(alfabeto, '3')] = get_string_ref(estados, "q6");
matriz[get_string_ref(estados, "q5")][get_char_ref(alfabeto, '4')] = get_string_ref(estados, "q6");
matriz[get_string_ref(estados, "q5")][get_char_ref(alfabeto, '5')] = get_string_ref(estados, "q6");
matriz[get_string_ref(estados, "q5")][get_char_ref(alfabeto, '6')] = get_string_ref(estados, "q6");
matriz[get_string_ref(estados, "q5")][get_char_ref(alfabeto, '7')] = get_string_ref(estados, "q6");
matriz[get_string_ref(estados, "q5")][get_char_ref(alfabeto, '8')] = get_string_ref(estados, "q6");
matriz[get_string_ref(estados, "q5")][get_char_ref(alfabeto, '9')] = get_string_ref(estados, "q6");
//transições de q6
matriz[get_string_ref(estados, "q6")][get_char_ref(alfabeto, '0')] = get_string_ref(estados, "q7");
matriz[get_string_ref(estados, "q6")][get_char_ref(alfabeto, '1')] = get_string_ref(estados, "q7");
matriz[get_string_ref(estados, "q6")][get_char_ref(alfabeto, '2')] = get_string_ref(estados, "q7");
matriz[get_string_ref(estados, "q6")][get_char_ref(alfabeto, '3')] = get_string_ref(estados, "q7");
matriz[get_string_ref(estados, "q6")][get_char_ref(alfabeto, '4')] = get_string_ref(estados, "q7");
matriz[get_string_ref(estados, "q6")][get_char_ref(alfabeto, '5')] = get_string_ref(estados, "q7");
matriz[get_string_ref(estados, "q6")][get_char_ref(alfabeto, '6')] = get_string_ref(estados, "q7");
matriz[get_string_ref(estados, "q6")][get_char_ref(alfabeto, '7')] = get_string_ref(estados, "q7");
matriz[get_string_ref(estados, "q6")][get_char_ref(alfabeto, '8')] = get_string_ref(estados, "q7");
matriz[get_string_ref(estados, "q6")][get_char_ref(alfabeto, '9')] = get_string_ref(estados, "q7");
//transições de q7
matriz[get_string_ref(estados, "q7")][get_char_ref(alfabeto, '-')] = get_string_ref(estados, "q8");
//transições de q8
matriz[get_string_ref(estados, "q8")][get_char_ref(alfabeto, '0')] = get_string_ref(estados, "q9");
matriz[get_string_ref(estados, "q8")][get_char_ref(alfabeto, '1')] = get_string_ref(estados, "q9");
matriz[get_string_ref(estados, "q8")][get_char_ref(alfabeto, '2')] = get_string_ref(estados, "q9");
matriz[get_string_ref(estados, "q8")][get_char_ref(alfabeto, '3')] = get_string_ref(estados, "q9");
matriz[get_string_ref(estados, "q8")][get_char_ref(alfabeto, '4')] = get_string_ref(estados, "q9");
matriz[get_string_ref(estados, "q8")][get_char_ref(alfabeto, '5')] = get_string_ref(estados, "q9");
matriz[get_string_ref(estados, "q8")][get_char_ref(alfabeto, '6')] = get_string_ref(estados, "q9");
matriz[get_string_ref(estados, "q8")][get_char_ref(alfabeto, '7')] = get_string_ref(estados, "q9");
matriz[get_string_ref(estados, "q8")][get_char_ref(alfabeto, '8')] = get_string_ref(estados, "q9");
matriz[get_string_ref(estados, "q8")][get_char_ref(alfabeto, '9')] = get_string_ref(estados, "q9");
//transições de q9
matriz[get_string_ref(estados, "q9")][get_char_ref(alfabeto, '0')] = get_string_ref(estados, "q10");
matriz[get_string_ref(estados, "q9")][get_char_ref(alfabeto, '1')] = get_string_ref(estados, "q10");
matriz[get_string_ref(estados, "q9")][get_char_ref(alfabeto, '2')] = get_string_ref(estados, "q10");
matriz[get_string_ref(estados, "q9")][get_char_ref(alfabeto, '3')] = get_string_ref(estados, "q10");
matriz[get_string_ref(estados, "q9")][get_char_ref(alfabeto, '4')] = get_string_ref(estados, "q10");
matriz[get_string_ref(estados, "q9")][get_char_ref(alfabeto, '5')] = get_string_ref(estados, "q10");
matriz[get_string_ref(estados, "q9")][get_char_ref(alfabeto, '6')] = get_string_ref(estados, "q10");
matriz[get_string_ref(estados, "q9")][get_char_ref(alfabeto, '7')] = get_string_ref(estados, "q10");
matriz[get_string_ref(estados, "q9")][get_char_ref(alfabeto, '8')] = get_string_ref(estados, "q10");
matriz[get_string_ref(estados, "q9")][get_char_ref(alfabeto, '9')] = get_string_ref(estados, "q10");
//transições de q10
matriz[get_string_ref(estados, "q10")][get_char_ref(alfabeto, '0')] = -1;
matriz[get_string_ref(estados, "q10")][get_char_ref(alfabeto, '1')] = -1;
matriz[get_string_ref(estados, "q10")][get_char_ref(alfabeto, '2')] = -1;
matriz[get_string_ref(estados, "q10")][get_char_ref(alfabeto, '3')] = -1;
matriz[get_string_ref(estados, "q10")][get_char_ref(alfabeto, '4')] = -1;
matriz[get_string_ref(estados, "q10")][get_char_ref(alfabeto, '5')] = -1;
matriz[get_string_ref(estados, "q10")][get_char_ref(alfabeto, '6')] = -1;
matriz[get_string_ref(estados, "q10")][get_char_ref(alfabeto, '7')] = -1;
matriz[get_string_ref(estados, "q10")][get_char_ref(alfabeto, '8')] = -1;
matriz[get_string_ref(estados, "q10")][get_char_ref(alfabeto, '9')] = -1;
matriz[get_string_ref(estados, "q10")][get_char_ref(alfabeto, '-')] = -1;
int estado = get_string_ref (estados, estado_inicial);
int estado_anterior = -1;
ArrayList<String> palavras_reconhecidas = new ArrayList();
String palavra = "";
//varre o código-fonte de um código
for (int i=0; i<codigoHTML.length(); i++){
estado_anterior = estado;
estado = proximo_estado(alfabeto, matriz, estado, codigoHTML.charAt(i));
//se o não há transição
if (estado == -1){
//pega estado inicial
estado = get_string_ref(estados, estado_inicial);
// se o estado anterior foi um estado final
if (get_string_ref(estados_finais, estados[estado_anterior]) != -1){
//se a palavra não é vazia adiciona palavra reconhecida
if ( ! palavra.equals("")){
palavras_reconhecidas.add(palavra);
}
// se ao analisar este caracter não houve transição
// teste-o novamente, considerando que o estado seja inicial
i--;
}
//zera palavra
palavra = "";
}else{
//se houver transição válida, adiciona caracter a palavra
palavra += codigoHTML.charAt(i);
}
}
//foreach no Java para exibir todas as palavras reconhecidas
for (String p: palavras_reconhecidas){
System.out.println (p);
}
}
}
Below is the error that happens:
run:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at buscapadraoweb.Main.main(Main.java:122)
Java Result: 1
The code that performs the search:
package buscaweb;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.Socket;
import java.net.URL;
import java.net.URLConnection;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SocketHandler;
/**
*
* @author Santiago
*/
public class CapturaRecursosWeb {
private ArrayList<String> listaRecursos = new ArrayList();
public ArrayList<String> carregarRecursos(){
ArrayList<String> resultado = new ArrayList();
for (String stringURL: listaRecursos){
String resposta = "";
try {
URL url = new URL(stringURL);
URLConnection connection = url.openConnection();
BufferedReader in = new BufferedReader(
new InputStreamReader(
connection.getInputStream()));
String inputLine;
StringBuffer sb = new StringBuffer();
while ((inputLine = in.readLine()) != null) sb.append(inputLine+"\n");
resposta = sb.toString();
resultado.add(resposta);
in.close();
} catch (MalformedURLException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
return resultado;
}
/**
* @return the listaRecursos
*/
public ArrayList<String> getListaRecursos() {
return listaRecursos;
}
}