Ir ao conteúdo
  • Cadastre-se
PaulaFabiana

Java Como ordenar um arquivo txt

Recommended Posts

Minha dúvida é como criar uma função que pegue, um lista que esta de 1000 à 1 e transforme ela em crescente,porque ela esta em ordem decrescente

package vetorentrada;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.SortedSet;
import java.util.TreeSet;

public class VetorEntrada {

    
   public static void main(String[] args) {
        try {
                  
            // Le o arquivo
            FileReader ler = new FileReader("Vetordeentrada.txt");
            BufferedReader reader = new BufferedReader(ler);  
            String linha;
            while( (linha = reader.readLine()) != null ){
                System.out.println(linha);
            }

           
        } catch (IOException e) {
            e.printStackTrace();
        }
    
}}
a saída é assim
1000
...
2
1
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

Gostaria que fosse assim
1
2
....
1000

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existem várias formas.
Acredito que a forma mais simples de você fazer isso é inserindo cada linha em uma Lista de Strings, como abaixo:

 

            String linha;
            List<String> lista = new ArrayList<String>()
            while( (linha = reader.readLine()) != null ){
                lista.add(linha);
            }

E depois disso utilizar algum algorítmo de ordenação para ordenar a lista. PORÉM: Se forem números, tome cuidado pos ele tende a ordenar Strings por caractere, o que resulta em algo como [1,10,11,12 ... 2,20,21 ...] ... Assim, teria que se atentar a essa situação ... Outra forma é utilizar a Biblioteca Collections ... 

Collections.sort(list, comparator);

Nesse caso, para evitar a Situação de ordem de números, você teria que implementar a Classe comparator para indicar o maior e menor.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Recomendo ler as linhas de texto e colocar numa árvore binária. Lê uma linha, insere-a na árvore binária.


Depois de lido o arquivo, percorre a árvore binária e a cada nó, escreve a linha. A árvore binária já coloca as linhas em ordem.

 

O argumento para comparação durante a inserção seria as colunas usadas para classificação.

 

O nó da árvore seria algo assim


 

class Nó { 
  String linha ;
  Nó maior ;
  Nó menor ;
}

Aí criaria uma classe árvore assim

 

classe Arvore {

     Nó raiz;

}

public void insere( Arvore raiz , String novalinha) {

     if (raiz == null) { 

            Nó novonó = new Nó();

            novonó.String = novalinha;

           novonó.maior = null;

          novonó.menor = null;

          raiz = novonó;

   } else { 

        int compara = strcmp(novalinha,raiz.linha);

       if (compara >=0)   { 

                   insere(raiz.maior, novalinha);

      } else {

             insere(raiz.menor, novalinha) ;

    }

}

public void percorre( Arvore raiz)  { 

        if (raiz == null) { 

              return;

        }

        percorre(raiz.menor);

       System.out.println( raiz.linha) ;

       percorre(raiz.maior);

}

 

 

adicionado 0 minutos depois
11 minutos atrás, psykotico disse:

Collections.sort(list, comparator);

Realmente, bem mais simples. parabens :)

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×