neste arquivo quero usar os 5 primeiros dígitos , utilizei substring …
agora … eu quero fazer as contagens dos 5 primeiros digitos , que são iguais
ficaria assim no caso
Use um HashMap<String,Integer>. Para cada linha que você recupera, procure por uma entrada no map usando sua string de 5 posições como chave. Se houver, atualize a entrada acrescentando 1 ao número. Se não, insira uma entrada nova com o valor um.
Bom gente … ja comecei aqui … estou usando o netbeans (os arquivos estão em anexo).
Seguinte … ja encontrei um probleminha aqui… pelo que estou vendo terei que usar arrays … e gostaria de algumas idéias ae …
no arquivo .txt (em anexo) , ha alguns numeros que podem se repetir … [exemplo : ol concessora (getIdOlConcessao) ] …
no caso … na construção do novo arquivo .txt , esse número não poderia se repetir … no caso , entraria a quantidade também (getQuantidade) …
procurei exemplos de Hashmap , mas não achei uma explicação que fosse parecida com o que eu estou procurando… se alguem puder me dar um exemplo eu agradecerei.
Ps: eu quero uma maneira de criar este arquivo txt , que seja a mais rápida(não sei se é só com o uso do hashmap que é possível) … pois o arquivo .txt que a aplicação irá ler é bem grande (tem cerca de umas 500.000 linhas … )
Vlw ae gente… se alguém não entendeu alguma coisa é só avisar que vou explicando…
acredito que seja mais ou menos isso que tu queira…
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class teste
{
public static void main(String[] args)
{
String filename = "C:\arquivo.txt";
List<String> texto = lerArquivo(filename);
Map<String, Integer> mapaDeContagens = new HashMap<String, Integer>();
for (String linhaDoTexto : texto) {
String primeirosCinco = linhaDoTexto.substring(0, 4);
// se ainda nao tinha contagem...
if (mapaDeContagens.get(primeirosCinco) == null) {
// entao coloca contagem = 1
mapaDeContagens.put(primeirosCinco, 1);
} else {
Integer cont = mapaDeContagens.get(primeirosCinco);
cont++;
mapaDeContagens.put(primeirosCinco, cont);
}
}
System.out.println(mapaDeContagens.entrySet());
}
public static List<String> lerArquivo(String filename)
{
// implemente uma forma para que o conteudo
// as linhas venham de um arquivo
List<String> arquivo = new ArrayList<String>();
arquivo.add("111112222233333444445555566666");
arquivo.add("111112222233333444445555566666");
arquivo.add("222222222233333444445555566666");
arquivo.add("222222222233333444445555566666");
arquivo.add("111112222233333444445555566666");
arquivo.add("333332222233333444445555566666");
arquivo.add("111112222233333444445555566666");
return arquivo;
}
}
a saida desse app é “[3333=1, 2222=2, 1111=4]”
feito[/quote]
Opa … é realmente + - isso que eu quero fazer …
seguinte … para ele mostrar apenas os valores de cont eu uso o System.out.println(mapaDeContagens.values()) certo?!? …
e para mostrar apenas os valores de primeirosCinco ?
@author skindedo
*/
public class LerArquivo {
private static Scanner entrada;
public static void main(String args[])
{
try
{
entrada = new Scanner( new File( "arquivo.txt" ) ) ;
}
catch ( FileNotFoundException filesNotFoundException )
{
System.err.println( "Erro ao abrir arquivo. Arquivo Inexistente." );
System.exit ( 1 ) ;
}
while (entrada.hasNextLine()) //aqui no caso ficaria a contagem das linhas
{
//aqui eu colocaria a variável das linhas do texto com o nextLine
}
}
}[/code]
como que vou fazer para implementar naquela parte utilizando o Scanner?
public List<String> lerArquivo(String caminhoParaArquivo) throws FileNotFoundException, IOException
{
File file = new File(caminhoParaArquivo);
List<String> arquivoLido = new ArrayList<String>();
BufferedReader br = new BufferedReader(new FileReader(file));
for (String linha = br.readLine(); linha != null; linha = br.readLine()) {
arquivoLido.add(linha);
}
br.close();
return arquivoLido;
}
umas dicas…
vc criou uma classe de nome LerArquivo. Geralmente ocorre o seguinte. Se aquilo que a gente quer é uma entidade (Substantivo) a gente cria uma classe. Já se é uma ação (Verbo), então, cria-se um método.
Então eu criaria uma Classe de nome ArquivoTexto, por ex. e dentro dessa classe eu definiria o método “lerArquivo()”, que nada mais é que uma ação que a entidade “ArquivoTexto” executa
[quote=sf.marcius]vc quer um método para ler arquivos-texto?
aqui tem um:
public List<String> lerArquivo(String caminhoParaArquivo) throws FileNotFoundException, IOException
{
File file = new File(caminhoParaArquivo);
List<String> arquivoLido = new ArrayList<String>();
BufferedReader br = new BufferedReader(new FileReader(file));
for (String linha = br.readLine(); linha != null; linha = br.readLine()) {
arquivoLido.add(linha);
}
br.close();
return arquivoLido;
}
umas dicas…
vc criou uma classe de nome LerArquivo. Geralmente ocorre o seguinte. Se aquilo que a gente quer é uma entidade (Substantivo) a gente cria uma classe. Já se é uma ação (Verbo), então, cria-se um método.
Então eu criaria uma Classe de nome ArquivoTexto, por ex. e dentro dessa classe eu definiria o método “lerArquivo()”, que nada mais é que uma ação que a entidade “ArquivoTexto” executa
feito![/quote]
Sim … isso foi o que eu fiz … é por que o método de ler o arquivo estava dentro da classe … dai eu copiei e colei ele em uma nova classe para limpá-lo só deixando o Scanner para postar aqui … mas na aplicação mesmo ele está como método =)
PS: cara por enquanto muito obrigado … ta dando certo aqui =) vlw msm