java.lang.StringIndexOutOfBoundsException: String index out of range: – 1

publicado por: Anonymous

Tengo el siguiente error al querer leer contenido de un archivo .txt y compararlo con el contenido de un ArrayList lo cual hago:

public void leer(ArrayList<String> arrayList) {
        try {
            // Abrimos el archivo con la ruta especificada.
            FileInputStream fstream = new FileInputStream(new File("ruta.txt"));
            // Creamos el objeto de entrada
            DataInputStream entrada = new DataInputStream(fstream);
            // Creamos el Buffer de Lectura
            BufferedReader buffer = new BufferedReader(new InputStreamReader(entrada));
            String contenido;
            // Leer el archivo linea por linea
            while ((contenido = buffer.readLine()) != null) {

                  String[] arrayStrings = contenido.split(",");
                  String[] array = arrayList.toArray(new String[arrayList.size()]);
                for (int i = 0; i < arrayStrings.length - 1; i++) {
                    for (int j = i + 1; j < arrayList.size(); j++) {
                        if (arrayStrings[i].substring(0, arrayStrings[i].lastIndexOf(",")).equals(array[j].substring(0, array[j].lastIndexOf(",")))) {
                            System.out.println("Contedodo: "+arrayStrings[i]+"     Contenido array: "+array[j]);
                        }
                    }
                }
//                 Imprimimos la línea por pantalla
//                System.out.println(contenido);
            }
            // Cerramos el archivo
            entrada.close();
        } catch (Exception e) { //Catch de excepciones
            System.err.println("Ocurrio un error: " + e.getMessage());
        }
    }

El contenido del archivo .txt es el siguiente:

25,SAN SALVADOR

45,SAN MIGUEL

32,SAN JERONIMO

20,BUENOS AIRES

El contenido del array es:

PDA25_20171022164520

PDA45_20171022164520

PDA35_20171022164520

PDA55_20171022164520

Donde quiero buscar el código de dos dígitos del archivo .txt y compararlo con el que hay en el array pero no logro hacerlo. El primer problema que tengo es la Exception java.lang.StringIndexOutOfBoundsException: String index out of range:-1 y el otro problema es que no se como compararlos, es decir, que busque el código en el archivo .txt y lo compare con el que hay dentro del array, mostrando a que provincia corresponde cada código, me explico.. algún ej que me ayude? Desde ya gracias.

solución

Su código puede quedar de la siguiente forma

public void leer(ArrayList<String> arrayList) {

    Map<String, String> mapaCodigosProvincia = new HashMap();

    try {
        // Abrimos el archivo con la ruta especificada.
        FileInputStream fstream = new FileInputStream(new File("ruta.txt"));
        // Creamos el objeto de entrada
        DataInputStream entrada = new DataInputStream(fstream);
        // Creamos el Buffer de Lectura
        BufferedReader buffer = new BufferedReader(new InputStreamReader(entrada));
        String contenido;
        // Leer el archivo linea por linea

        while ((contenido = buffer.readLine()) != null) {
            if(!contenido.equals("")){
                String[] arrayStrings = contenido.split(",");
                mapaCodigosProvincia.put(arrayStrings[0], arrayStrings[1]);
            }else{
                continue;
            }
        }

        // Cerramos el archivo
        entrada.close();
    } catch (Exception e) { //Catch de excepciones
        System.err.println("Ocurrio un error: " + e.getMessage());
    }

    //Recorremos el arrayList
    for(String nombreArchivo : arrayList){
        String[] separador = nombreArchivo.split("_");
        String provincia = separador[0].replace("PDA", "").trim();

        //Obtenemos el nombre de la provincia
        String nombreProvincia = mapaCodigosProvincia.get(provincia);
    }

}
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *