Contar elementos repetidos en un ArrayList

De nuevo yo, mira lo que pasa es que ya pude guardar mi archivo txt en un array list y mostarlo por pantalla, ahora lo que pretendo hacer es, contar cuantas veces se presenta cada elemento, se supone que debe kedarm algo así:
El vector es:
A
E
I
O
U
A
E
I
O
U
U
La cadena A se presenta 2 veces
La cadena E se presenta 2 veces
La cadena I se presenta 2 veces
La cadena O se presenta 2 veces
La cadena U se presenta 3 veces
Pero me aparece lo siguiente:
EL VECTOR ES:
A
E
I
O
U
A
E
I
O
U
U
La cadena A se presenta 2 veces
La cadena E se presenta 2 veces
La cadena I se presenta 2 veces
La cadena O se presenta 2 veces
La cadena U se presenta 3 veces
La cadena A se presenta 1 veces
La cadena E se presenta 1 veces
La cadena I se presenta 1 veces
La cadena O se presenta 1 veces
La cadena U se presenta 2 veces
La cadena U se presenta 1 veces

El código es el siguiente:
import java.io.*;
import javax.swing.*;
import java.util.ArrayList;
public class Contar {
public File archivo = null;
public FileReader fr = null;
public ArrayList lineas = new ArrayList();
public String linea;
public String linea2;
//INICIO DE METODOS
public void GuardarArreglo(){
try {
archivo = new File ("C:/archivo.txt");
fr = new FileReader (archivo);
BufferedReader br = new BufferedReader(fr);
while((linea=br.readLine())!=null){
lineas.add(linea);
}
System.out.print ("EL VECTOR ES : \n ");//MOSTRAR LOS DATOS DEL ARREGLO
for (int j = 0 ; j < lineas.size() ; j++){
linea = (String)lineas.get(j);
System.out.print (" "+ linea +"\n" ); }
//CONTAR EVENTOS
for (int k = 0 ; k <lineas.size() ; k++)
{
int c = 1;
for (int l = k + 1 ; l <lineas.size(); l++)
{
if (lineas.get(k).equals(lineas.get(l)) )
{
c++;}}
if ( lineas.get(k)!= null)
{
System.out.println ();
System.out.println ("LA CADENA " + lineas.get(k) + " " + "SE PRESENTO " + c + "veces");
}}
}//FIN DEL TRY
catch(IOException e){ System.out.println(e); }
finally{
try{ //el bloque finally se ejecuta siempre, por eso, si se cierra el fichero
if( fr != null){ //al final del primer try, y ha dado un error antes, pasaría
fr.close(); //al 1er catch y luego saldría, dejándolo abierto. Es conveniente
} //cerrarlo aquí, comprobando que no sea -por un error anterior, como 0.
}catch (IOException e){ // no tener permisos de lectura o que no exista - de valor null.
}
} }//fin de la clase comparar
public static void main(String[] args) {
Contar A=new Contar(); //creamos un objeto
A.GuardarArreglo();
System.exit(0);}}

1 respuesta

Respuesta
1
No tengo mucho tiempo para revisar el código, lo siento, pero te puedo decir como hacerlo. Declara un array de 2 dimensiones, en la primera, vas guardando las letras que te vas encontrando si no existen previamente, y en la segunda, vas sumando una unidad cada vez que se repita esa letra. Por lo tanto, cada vez que leas un carácter, recorres el aaray buscando si existe esa letra ya en el, y si existe, le sumas uno, si no, metes una nueva entrada.
Luego solo tienes que recorrerte ese array y mostrar los caracteres y el numero de veces que aparecen.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas