Adicionar texto a uma matriz

8 respostas
BuZZa

Estou a começar a utilizar java e tenho um projecto para fazer…
Tenho de ter uma matriz, em que nas linhas recebe palavras e nas colunas textos .txt.
O objectivo é depois comparar se a palavra está nos textos txt. depois tenho de contar o numero de vezes que essa palavra aparece nos textos. nao sei se me estou a explicar bem…
mas preciso mesmo de ajuda.
o meu programa neste momento ja pede ao utilizador para escolher os documentos que quer introduzir, ja os introduz e guarda todas as palavras que estao dentro do documento.
Agora o meu problema é mesmo conseguir introduzir isso na matriz…
Será que me podem dizer como posso fazer isso? ou indicar-me algum site onde haja exemplos disso?tou farta de procurar e nao encontro nada que me ajude…
Obrigado

8 Respostas

Lavieri

eu tb sou pessimo em portugues… mas um ponto de partida, é vc entender a real diferença entre

k e q

k tem a pronuncia de cá
q tem a pronuncia de que

então trocar… que por k, é uma pessima ideia… pense nisso!

^^

Ps.: Não entendeu ? tente ler seu texto, eu tive um tremenda dificuldade ^^

BuZZa

peço desculpa é do hábito… :)vou reescrever

Lavieri
public class ContaPalavra {
     private final String palavra;
     private final Map<String,Integer> txtCount = new HashMap<String,Integer>();

     public ContaPalavra(String palavra) {
           this.palavra = palavra;
     }

     public ContaPalavra addCount(String txtFile) {
         int count = getCount(txtFile);
         txtCount.put(txtFile, ++count);
         return this;
     }

     public int getCount(String txtFile) {
         if (!txtCount.containsKey(txtFile))
             return 0;
         return txtCount.get(txtFile);
     }

     public String getPalavra() {
         return palavra;
     }

    //é imporante implementar EQUALS e HASHCODE quando usa coleções, c kizer mais infos, veja meu blog, na minha assinatura

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final ContaPalavra other = (ContaPalavra) obj;
        if ((this.palavra == null) ? (other.palavra != null) : !this.palavra.equals(other.palavra)) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 47 * hash + (this.palavra != null ? this.palavra.hashCode() : 0);
        return hash;
    }
}
public class GuardaPalavras {
    private List<ContaPalavra> lista = new ArrayList<ContaPalavra>();

    public GuardaPalavras addPalavra(String palavra, String txtFile) {
        ContaPalavra cp = getContaPalavra(palavra);
        if (cp == null) {
            cp = new ContaPalavra(palavra);
            lista.add(cp);
        }
        cp.addCount(txtFile);
        return this;
    }

    public ContaPalavra getContaPalavra(String palavra) {
        for (ContaPalavra cp : lista) {
            if (cp.getPalavra().equals(palavra))
                return cp;
        }
        return null;
    }
    
    public List<ContaPalavra> getLista() {
        return lista;
    }

    public int getCount(String palavra, String txtFile) {
        ContaPalavra cp = getContaPalavra(palavra);
        if (cp == null)
            return 0;
        return cp.getCount(txtFile);
    }
}

os imports usados foram...

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Lavieri

como usar ?? assim....

public static void main(String ... args) {
        GuardaPalavras repositorio = new GuardaPalavras();

        repositorio
                .addPalavra("José","diario.txt")
                .addPalavra("Macaco","abobrinha.txt")
                .addPalavra("José","abobrinha.txt")
                .addPalavra("José","abobrinha.txt")
                .addPalavra("José","abobrinha.txt");


        System.out.println(repositorio.getCount("José","abobrinha.txt")); //resultado 3
        System.out.println(repositorio.getCount("José","diario.txt")); //resultado 1
        System.out.println(repositorio.getCount("Macaco","diario.txt")); //resultado 0
        System.out.println(repositorio.getCount("Cebola","diario.txt")); //resultado 0
    }
BuZZa

Obrigado! vou tentar implementar esse codigo no meu:)
muito obrigado pela ajuda!:slight_smile:

BuZZa

Nao faz exactamente o que eu pretendo, mas foi uma grande ajuda para contar as palavras e para perceber a maneira como sao gravadas as informações!
:slight_smile:
Muito Obrigado.

BuZZa

Lavieri

BuZZa:
Obrigado! vou tentar implementar esse codigo no meu:)
muito obrigado pela ajuda!:)

ok … mas leia o código com atenção, veja o que a calsse ContaPalavra faz…

veja que ela guarda 2 coisas… uma String, contendo a palavra… e um mapa…

um mapa sempre guarda informações de chaves,e valores… a chave no caso é o arquivoTxt, e o valor é o contador…

getCount(txtFile) …
eu verifico no mapa, se ja existe o alguma key para txtFile, se existir, eu recupero o valor para o contador através de “txtCount.get(txtFile);” caso não existe o contador é “0”.

veja que quando alguem faz um addCont(txtFile) … eu subistituo o valor no mapa, pelo novo valor, se não existir o valor no mapa, ele é criado pelo proprio mapa, atuomaticamente … “txtCount.put(txtFile, ++count);” … veja que antes de incluir, eu uso ++count, ou seja, incremento o contador, antes de atualizar o valor.

BuZZa

Afinal tinha entendido mal o que tenho de fazer…
Tenho de ter por exemplo 2 textos: s1=“joao e pedro no joao” e s2=“ola sou o joao pedro”
tenho de comparar se as palavras que estao no s1 estao no s2 ,e conta-las pa matriz…(esta parte é que me esta a deixar doida)

junto envio o codigo, para ver se me podem ajudar…

vou tentar dar o exemplo em linguagem natural do que preciso fazer…

s1=“joao e pedro no o joao” e s2=“ola sou o joao pedro”

se “joao” do s1 estiver em s2 conta++ e passo valor para essa posiçao da matriz
se nao estiver meto 0
neste caso o conta=1, porque so aparece 1 vez.
Se a palavra se repetir no s1 tem de ser excluida, mas no S2 nao.
com este exemplo deveria dar uma matriz deste genero:

0 0 0 1 0
  0 0 0 0 0
  0 0 0 0 1
  0 0 0 0 0
  0 0 1 0 0 
  0 0 0 1 0

nao consigo fazer a matriz… tens de ser tudo automatico, a escolha dos textos é automatica (ja feito) e dp a passagem dos valores tambem…

Criado 20 de abril de 2009
Ultima resposta 21 de abr. de 2009
Respostas 8
Participantes 2