Ordenar Strings

   Ayer me hicieron una pregunta de como podrían tomarse los datos de un archivo utilizando "JFileChooser" y ordenarlos, una forma de hacer esto es usando el método de la burbuja, pero no nos compliquemos tanto. Utilicemos los métodos que Java nos ofrece y todo será mas rápido y sencillo, como son caracteres ASCII no nos importa si son datos numéricos o no ya que tienen una numeración ordenada, para esto veamos el siguiente ejemplo en el cual se pasan los datos a una lista, se ordenan y se muestran en el área de texto:
import java.io.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Collections;

@SuppressWarnings("deprecation")
public class OrdenarString extends JFrame {
 boolean boton=false;
 JPanel PANEL =new JPanel();
 JMenuBar B = new JMenuBar();
 JMenu MENU = new JMenu("Click Aquí");
 JMenuItem M1 = new JMenuItem("Abrir Archivo");
 JMenuItem M2 = new JMenuItem("Salir");
 JTextArea TEXTO = new JTextArea(20,30);
 JScrollPane scroll = new JScrollPane(TEXTO);

 public OrdenarString() {
  super("Ejemplo de JFileChooser con M. de Burbuja");
  setLocation(100,100);
  setSize(640,480);
  setJMenuBar(B);
  add(PANEL);
  PANEL.add(B);
  PANEL.add(scroll);
  B.add(MENU);
  MENU.add(M1);
  MENU.add(M2);
  M1.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent evt) {
  abrir();
   }
  });
  M2.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent evt) {
  System.exit(0);
   }
  });
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setVisible(true);
 }

 void abrir() {
  try {
   String nombre="";
   String textotemp="";
   String orden="";
   ArrayList lista = new ArrayList();

   JFileChooser ARCHIVO=new JFileChooser(System.getProperty("user.dir"));
   ARCHIVO.showOpenDialog(this);
   File ABRIR=ARCHIVO.getSelectedFile();

   if(ABRIR != null) {
    nombre=ARCHIVO.getSelectedFile().getName();
    TEXTO.setText("");
    FileReader FICHERO=new FileReader(ABRIR);
    BufferedReader LEER=new BufferedReader(FICHERO);
    while((textotemp=LEER.readLine()) != null) {
     lista.add(textotemp);
    }
    LEER.close();
    Collections.sort(lista);
    for (int i=0;i<lista.size();i++){
     orden+= lista.get(i).toString()+",";
    }
    TEXTO.append(orden);
   }
  } catch(FileNotFoundException exp) {
    JOptionPane.showMessageDialog(null, "El archivo no existe o no se"+
    "encuentra en esta carpeta.","Error", JOptionPane.WARNING_MESSAGE);
  } catch(Exception exp) {
    System.out.println(exp);
  }
 }

 public static void main(String[] arg) {
  JOptionPane.showMessageDialog(null,"Ejemplo de Ordenamiento de Strings...n");
  JOptionPane.showMessageDialog(null,"By Carlitox ("+
   "http://calitoxenlaweb.blogspot.com)");
  new OrdenarString();
 }
}

   Para ver como funciona creamos un archivo que contenga nombres aleatorios, cada nombre debe estar separado por un salto de línea(enter), algunas de las cosas ya las he explicado anteriormente (enlace), pero vamos a explicar lo importante...

   Primero que nada tenemos un "ArrayList" lo que es una lista en forma de arreglo, esto nos servirá para listar cada uno de los elementos que se leen desde el archivo y procesarlos de forma mas rápida y sencilla.

   Luego tenemos
while((textotemp=LEER.readLine()) != null) { lista.add(textotemp); }

   Con esto por cada "enter" que tenga el archivo contamos la cantidad de líneas, y como cada elemente esta delimitado de esta forma almacenamos la cantidad de elementos en la lista a medida que vamos leyendo cada línea.

   Lo mas importante es el método "Collections.sort(lista)" que trabaja sobre el arreglo para ordenar los elementos que hemos almacenado en la misma. Ya por último agregamos al "TextArea" lo que se ha almacenado de forma ordenada con "orden+= lista.get(i).toString()".

   Si queremos que cada elemento este delimitado por un salto de línea nos ubicamos en la línea de código:

orden+= lista.get(i).toString()+",";

   Lo resaltado en rojo lo cambiamos por "\ n"(sin espacios), o por cualquier otro caracter como un guión, una coma o un punto. Para ordenar números simplemente buscamos la línea de código

lista.add(textotemp);

Y lo resaltado lo cambiamos por Double.parseDouble(textotemp), o por Integer.parseInt, Float o cualquier otro.

Lamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.

Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión EmoticonEmoticon