Tabular en jtextarea

Hi:
Mira el problema que tengo es, que como tengo un arreglo de strings, similar a este:
String p[]={"hola","comoestastu","hola2","comoestas2",etc..}
entonces  leo un archivo txt,  b usco si la linea comienza con algun elemneto del arreglo, si es asi pues va incrementando, y despues k leio todo el archivo, pues muestra en un textarea la variable  y el numero de veces k se encontro;
el codigo es: 
File archivo = null;
FileReader fr = null;
String linea;
String b;
ArrayList lineas = new ArrayList();
ArrayList lineas2=new ArrayList();
String p[]={ cadenas del string de distintos tamaños};
try {
fr = new FileReader (s2);
BufferedReader br = new BufferedReader(fr);
while((linea=br.readLine())!=null){
lineas.add(linea); } //fin while
for (int j = 0 ; j < lineas.size() ; j++){
linea = (String)lineas.get(j);
StringTokenizer st = new StringTokenizer( linea,"=" );
while(st.hasMoreTokens()){ //inicio while2
b= st.nextToken();
for (int c = 0; c< p.length; c++ )
if(b.startsWith(p[c]))
lineas2.add(b); }//fin while2
} //fin for
for (int k = 0 ; k < lineas2.size() ; k++){
b=(String)lineas2.get(k);
}
areaSalida.append ("\n");
//conteo areaSalida.append ("\n");
areaSalida.append ("ESTADOS"+ "\n");
for (int l = 0 ; l <lineas2.size() ; l++)
{
int h = 1;
for (int m = l + 1 ; m<lineas2.size(); m++)
{
if ( lineas2.get(l)!=null && lineas2.get(m)!=null && lineas2.get(l).equals(lineas2.get(m)) )
{
h++;
lineas2.set(m,null); }}
if ( lineas2.get(l)!= null)
{
areaSalida.append ( lineas2.get(l)+ " " + h +"\n");
}}
}//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
}catch (IOException e){ // no tener permisos de lectura o que no exista - de valor null.
}

El problema es que lo muestra así:
Hola 5
comoestastu 10
hola2 3
Y lo que quiero es que se muestre así
Hola 5
comoestastu 10
¿hola2 3
como puedo hacerle para que se vea si?
Gracias
:)

1 respuesta

Respuesta
1
Yo lo que haría es lo siguiente:
1) Recorre el array donde metes las palabras clave y saca la palabra más larga:
int maxLen = 0;
int len;
for (int z=0; z
<p.length; z++){
   len = p[z].length();
   if (len>maxLen) maxLen = len;
}

2) Ahora, en el bucle donde metes las lineas en el textArea, tendrás que hacer un pequeño cambio:

String lineaTemp;
int numBlancos;
for (int l = 0 ; l <lineas2.size() ; l++){
   int h = 1;
   for (int m = l + 1 ; m<lineas2.size(); m++){
     if ( lineas2.get(l)!=null && lineas2.get(m)!=null && lineas2.get(l).equals(lineas2.get(m)) ){
        h++;
        lineas2.set(m,null);
     }
    }
    if ( lineas2.get(l)!= null){
       lineaTemp = (String)lineas2.get(l);
       len = lineaTemp.length();
       numBlancos = maxLen - len;
       numBlancos += 3;//separación
       for (int z=0; z<numBlancos; z++){
           lineaTemp += " ";
       }
       lineaTemp += h + "\n";
       areaSalida.append ( lineaTemp);
    }
}

Creo que con esto te servirá.
hola;
Probé lo que me dijiste y sigue pasando lo mismo
:(
Se me olvidó decirte que mi método solo funciona si el textArea tiene un tipo de letra donde todas las letras ocupen lo mismo, como por ejemplo "System". Puedes cambiar el tipo de letra con este código:
Font font = new Font("System", Font.PLAIN,  20);
text. setFont(font);

Hay bastantes tipos de letra, pero no me acuerdo los que hacen que todos los caracteres ocupen lo mismo. Puedes probar con "Serif", "Courier", "Dialog", "Monospaced", a ver que tal queda. Puedes obtener todas las fuentes que tienes disponibles con este código:

String[] nombreFuentes=java.awt.Toolkit.getDefaultToolkit().getFontList();
for(int z=0; z<nombreFuentes.length; z++){
System.out.println(nombreFuentes[z]);
}

Un saludo:
Carlos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas