Manipulação e ordenação de Arquivos

Bom dia galera tenho que desenvolver um programa em java com leitura de arquivo mas tenho que pegar este valores e ordena-los com algumas funções quicksort e seleção mas o arquivo vem como String como faço para transformar o arquivo String em inteiro o mandar para a função, lembrando que já utilizei ex: Integer x = Interger.parseInt(linha); a leitura do arquivo já esta pronto falta agora converter o arquivo e mandar pra função sendo que o mesmo esta em um arquivo .txt como as seguintes informações.
23;oudre
12;hhsk
1;ieEaml
100;Yhdna

E deve ser ordenado e sair da seguinte maneira:
1;ieEaml
12;hhsk
23;oudre
100;Yhdna

Voce ganhou um premio de melhor explicação de topico. kkkk

Transformar um arquivo em inteiro?!?!?!??!?!

Tá, vc leu o arquivo texto, cada linha veio na forma de uma String

Beleza, agora você tem que separar as partes da linha pelo ponto-e-virgula
pode usar indexOf(";") para achar a posicao na String e depois
pode usar substring para separar as partes. Pode usar StringTokenizer
também, é bom e já coloca tudo em um array.

Separada a primeira parte e a segunda, converta a primeira em inteiro
e coloque esse conjunto num objeto e o grave numa list.

Em seguida pode aplicar ordenação e tudo mais.

Geralmente uso o método split da String por exemplo

String []guardarDados = suaLinhaLida.split(";"); //método split separa String de acordo com parametro especifico te retornando uma Array //depois converto os dados int inteiro = Integer.parseInt(guardarDados[0]); //no seu caso o tipo inteiro estará na 1º posição da array String nome = guardarDados[1]);

flw!!

public static void main(String[] args) {
				
		try {
			   BufferedReader leitor = new BufferedReader(
			   new FileReader("arquivo.txt"));
			   String linha = leitor.readLine();
			   
			   while (linha != null) {
			      //processar a linha lida
			      System.out.println(linha);
			      linha = leitor.readLine();
			   }			   
			   leitor.close();
			} catch (FileNotFoundException ex) {
				JOptionPane.showMessageDialog(null, "Erro:"+ex);
			   //System.out.println("Erro " + ex);
			} catch (IOException ex) {
				JOptionPane.showMessageDialog(null, "Erro:"+ex);
			   //System.out.println("Erro " + ex);
			}
	}

// Esta e a parte de código já implementada no console tem a seguinte saída

23;abcd
12;zyxw
49;pqrs
8;wzxt
31;optrs

tenho que desmembrar os numero das letras é chamar as funções

 System.out.println(entry.leLinha().substring(0,2));

Não sei se seria certo utilizar o substring pois pode existir variáveis que sejam maiores ou menores

ex: 765;jhdt
12;gtd
1;ased

Você não lê as respostas? Ou não as entende?

O Ivan te mostrou a sequencia.

Faça um Split pelo ponto-e-virgula e você terá os valores separados sem precisar usar substring:

String []guardarDados = linha.split(";"); //método split separa String de acordo com parametro especifico te retornando uma Array   
//depois converto os dados   
int inteiro = Integer.parseInt(guardarDados[0]); //no seu caso o tipo inteiro estará na 1º posição da array   
String nome = guardarDados[1]);  

Coloca isso dentro do teu while, depois de ler a linha.

E na sequencia usa esse inteiro e o nome para guardar as informacoes ou fazer algo com elas.

…Separada a primeira parte e a segunda, converta a primeira em inteiro
e coloque esse conjunto num objeto e o grave numa list.

Em seguida pode aplicar ordenação e tudo mais.

como eu faço este processo aqui ?

Que tipo de lista você vai usar?

QuickSort trabalho com vetores, então vc deveria criar um array
com os inteiros dos textos. e usar o quicksort para ordenar este array.

Depois aplicar este array ordenado para mostrar os nomes respectivos

public static void quick_sort(int []v,int ini, int fim){
                int meio;
 
                if(ini<fim){
                        meio = partition(v,ini,fim);
                        quick_sort(v,ini,meio);
                        quick_sort(v,meio+1,fim);
                }
        }
 
        public static int partition(int []v, int ini, int fim){
                int pivo, topo,i;
                pivo = v[ini];
                topo = ini;
 
                for(i=ini+1;i<fim;i++){
                        if(v[i]<pivo){
                                v[topo]=v[i];
                                v[i]=v[topo+1];
                                topo++;        
                        }
                }
                v[topo]=pivo;
                return topo;
        }

…QuickSort trabalho com vetores, então vc deveria criar um array
com os inteiros dos textos. e usar o quicksort para ordenar este array.
Depois aplicar este array ordenado para mostrar os nomes respectivos …

A parte da leitura esta ok só não estou conseguindo colocar os dados em um vetor e trabalhar com os valores para mandar para função de ordenação sendo que depois precisarei da String ordenada.

Poste o código do que vc já fez e tentamos te ajudar.

Colocando num vetor.

import java.awt.List;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.regex.Pattern;

import javax.swing.JOptionPane;
import ultilitarios.*;
import ultilitarios.QuickSort;
import br.com.funcoes.*;
import br.com.entrada.*;

public class home {

	
	private static String vetor;
	quiksort quick = new quiksort();
	
	// Metodos do programa //
	 // 
	// Fim dos Métodos //
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int inteiro;
		try {
			   BufferedReader leitor = new BufferedReader(
			   new FileReader("entrada-ord-50000.txt"));
			   ArrayList<String> Dados = new ArrayList<String>();
			   String linha = leitor.readLine();
			   while (linha != null) {
			      
			      Dados.add(linha);
			      String guardarDados[] = linha.split(";");
			      inteiro = Integer.parseInt(guardarDados[0]);
			      linha = leitor.readLine();
			      
			   }
			   System.out.println("Vetor:"+Dados);
			   leitor.close();
			} catch (FileNotFoundException ex) {
				JOptionPane.showMessageDialog(null, "Erro:"+ex);
			} catch (IOException ex) {
				JOptionPane.showMessageDialog(null, "Erro:"+ex);
			}
			
	}
	
}

Segue código. 

Voce poderia postar tua classe com o QuickSort para que eu possa ver parametros dela.


package ultilitarios;

public class quick {
	
	public static void quick_srt(int array[],int low, int n){
		  int lo = low;
		  int hi = n;
		  if (lo >= n) {
		  return;
	  }
	  int mid = array[(lo + hi) / 2];
	  while (lo < hi) {
	  while (lo<hi && array[lo] < mid) {
		  lo++;
	  }
	  while (lo<hi && array[hi] > mid) {
		  hi--;
	  }
	  if (lo < hi) {
		  int T = array[lo];
		  array[lo] = array[hi];
		  array[hi] = T;
	  }
	  }
	  if (hi < lo) {
		  int T = hi;
		  hi = lo;
		  lo = T;
	  }
	  quick_srt(array, low, lo);
	  quick_srt(array, lo == low ? lo+1 : lo, n);
	  }
	
	

}

Nao tenho muito tempo para esperar a tua boa vontade, entao fiz algo
usando um quick_sort que eu já tinha postado aqui anteriormente apenas
adaptando ele. Nao pude testar por que nao tenho seu arquivo de texto
e tbm nao tava com vontade de inventar um.

import java.io.BufferedReader;     
import java.io.FileNotFoundException;   
import java.io.FileReader;    
import java.io.IOException;   
import java.util.ArrayList;   
  
import javax.swing.JOptionPane;   
  
public class home {   
         
    public static void main(String[] args) {
        
        //Duas listas para guardar os numeros e textos separadamente
        ArrayList<Integer> numeros = new ArrayList<Integer>();
        ArrayList<String> textos = new ArrayList<String>();
        
        try {
            BufferedReader leitor = new BufferedReader(
                    new FileReader("entrada-ord-50000.txt"));
            
            String linha = leitor.readLine();
            while (linha != null) {
                
                String guardarDados[] = linha.split(";");
                
                numeros.add(Integer.parseInt(guardarDados[0]));
                textos.add(guardarDados[1]);
                
                linha = leitor.readLine();
            }
            leitor.close();            
            
        } catch (FileNotFoundException ex) {
            JOptionPane.showMessageDialog(null, "Erro:" + ex);
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(null, "Erro:" + ex);
        }
        
        //Chegou até aqui é preciso ordenar pelos numeros
        //Mas o quicksort precisa de um vetor, não uma Lista.
        //Entao o jeito é criar um vetor e passar os dados da
        //lista para ele.
        
        int[] v = new int[numeros.size()];
        String[] t = new String[numeros.size()];
        
        for(int i=0; i<numeros.size(); i++){
            v[i] = numeros.get(i).intValue();
            t[i] = textos.get(i);
        }
        
        //Vetores carregados passar para o quicksort
        quick_sort(v, 0, numeros.size(), t);
        
        //Os vetores v e t estao ordenados pelo valor de v
        //Agora é só imprimir
        
        for(int i=0; i<numeros.size(); i++){
            System.out.println(v[i] + ";" + t[i]);
        }        
    }
    
    public static void quick_sort(int[] v, int ini, int fim, String[] t) {
        int meio;

        if (ini < fim) {
            meio = partition(v, ini, fim, t);
            quick_sort(v, ini, meio, t);
            quick_sort(v, meio + 1, fim, t);
        }
    }

    public static int partition(int[] v, int ini, int fim, String[] t) {
        int pivo, topo, i;
        String pivoS;
        pivo = v[ini];
        pivoS = t[ini];
        topo = ini;

        for (i = ini + 1; i < fim; i++) {
            if (v[i] < pivo) {
                v[topo] = v[i];
                t[topo] = t[i];
                v[i] = v[topo + 1];
                t[i] = t[topo + 1];
                topo++;
            }
        }
        v[topo] = pivo;
        t[topo] = pivoS;
        return topo;
    }

}   

Bem, meu quick é praticamente o mesmo que o teu.

Eu apenas incluí o array de Strings junto para que
ficasse na ordem dos números.

Faça um teste, eu não pude testar.

Fiz um teste e havia um erro, um -1 na linha que ativa o quicksort, o correto é:

//Vetores carregados passar para o quicksort
        quick_sort(v, 0, numeros.size(), t);