Como separar essas palavras em java sendo lidas por um arquivo txt

9 respostas
java
Y

Oi pessoal, eu estou fazendo um programa em java e nesse meu programa é lido um arquivo txt como entrada e eu devo separar as palavras por vírgula e linhas por exemplo:

“Outro Professor”, “OP”

“Estruturas de Dados e Programação Orientada a Objetos - T01”, “EDOO-T01”

neste caso Outro professor seria salvo em um array como valor, OP como chave, e Estrutura de dados deve ser salvo em outro array, e EDOO como uma chave desse outro array, como eu consigo fazer essa distinção em java?

9 Respostas

j-menezes

Sim você consegue.
Veja que tem muitas formas de ler o arquivo txt

Para separar as palavras, tem varias formas
1.metodo split da classe String
2.StringTokenizer
3.Obter atraves de um laço usando str.charAt()
4… enfim …

Y
no meu caso eu tava lendo esse arquivo assim:

for (int i = 0; !StdIn.isEmpty(); i++) {

String nome = StdIn.readString();

}

nesse caso ele vai lendo palavra por palavra, o que me ajuda na hora de separar elas, a maior dúvida que tenho é como eu faço pra identificar esse espaço que seria quando você pula linha, não é um espaço do tipo backspace seria como apertar enter no caso.
j-menezes

Nesse seu caso, não pode ser como esta sendo feito. Porque se ele traz de palavra em palavra
os espaços são ignorados.
O que você pode fazer é ler caracter por caracter e colocar um laço para obte-los até encontrar o espaço ou final de linha.
Normalmente dentro de um txt tem o caracter 13 10 - Carriage Return / Line Feed, que siignifica nova linha ou final de linha.
Tem que filtrar.

Y

então a melhor escolha seria trocar o readString, identificar as aspas pra pegar o que ta dentro, separar pela vírgula, e identificar essa nova linha? só pra confirmar mesmo kkkkkkkk

j-menezes

Como mencionei, tem varias opções.
Isso pode ser feito.

staroski

Assim deve resolver:

String regex = "\"([^\"]*)\""; // regex para extrair texto entre aspas
Pattern pattern = Pattern.compile(regex);

String linha = null;
while ((linha = StdIn.readLine()) != null) {
    Matcher matcher = pattern.matcher(linha);
    while (matcher.find()) {
        String textoEntreAspas = matcher.group(0);
        System.out.println(textoEntreAspas);
    }
}
Y

Vou tentar, muito obrigado

Y

eu consegui fazer tudo compila sem problemas, eu olho caractere por caractere mas por algum motivo não ta lendo a entrada direito porque não tem valores sendo salvos no vetores, não sei se pode postar links aqui mas da pra dar uma olhada? eu fiz ele através do eclipse

j-menezes

Se possivel, coloca somente a parte do codigo que está dando o erro aqui pra gente ver.

Criado 13 de novembro de 2019
Ultima resposta 19 de nov. de 2019
Respostas 9
Participantes 3