?Separar uma String que contém Virgulas?Colocando cada palavra entre virgulas numa posicao vet

3 respostas
SirDominque

Oi Gente.
Estou com um problema aqui...

Meu programa java le uma String , parecida com essa : "Johnson",18,nva,11,11,3,216,21938.123.213.32,hashcode,[unknown]

Enfim, Uso esse código aqui :

public void reading() throws FileNotFoundException, IOException {
        BufferedReader in = new BufferedReader(new FileReader("playerlist.csv"));
        String linha = "";
    
        int i = 0;
     
       while ((linha = in.readLine()) != null) {
            
            Players temp = new Players();
            temp.setPlayerName(linha.split(",")[0]);
            temp.setPlayerId(linha.split(",")[1]);
            temp.setPlayerTeam(linha.split(",")[2]);
            temp.setPlayerScore(linha.split(",")[3]);
            temp.setPlayerKills(linha.split(",")[4]);
            temp.setPlayerDeaths(linha.split(",")[5]);
            temp.setPlayerPing(linha.split(",")[6]);
            temp.setPlayerIP(linha.split(",")[7]);
            temp.setPlayerHash(linha.split(",")[8]);
            lista.add(temp);
           
            i++;
        }
        
        //Para cada objeto maroto na lista(Leitura do for each)
        for(Players m : lista)
        {
            //System.out.println(m.getNome() + "," + m.getFuck());
            System.out.println(m.getPlayerName() + "\n" + m.getPlayerTeam() +"\n"+ m.getPlayerScore() +"\n"+ m.getPlayerHash());
            break;
        }

Funciona Normalmente.
Depois eu Coloco esses códigos na tabela;

O Problema é que ,
Quando a String esta assim : "Johnson",18,nva,11,11,3,216,21938.123.213.32,hashcode,[unknown] , ela funciona,

Porém, ali onde esta johnson, o usuário, pode colocar " ( aspas ) e , (vírgulas ), ou seja, A String poderia vir assim :

"J"ohn,son",18,nva,11,11,3,216,21938.123.213.32,hashcode,[unknown]

...
Tentei resolver isso com a ajuda de um amigo meu, mas não conseguimos...
Então vim pedir ajuda no templo Jedi,Java

O que posso fazer pra superar esse obstáculo :P ?

3 Respostas

ViniGodoy

Nesse caso, o que você gostaria que fosse gerado?

A String “J"ohn,son” como argumento 0?

Outra coisa, chamar o split a cada linha é terrívelmente ineficiente. Você vai fazer o java fazer o parse de sua String várias vezes.

Guarde o resultado numa variável, por exemplo:

String campos[] = linhas.split(","); temp.setPlayerName(campos[0]); temp.setPlayerId(campos[1]);

SirDominque
ViniGodoy:
Nesse caso, o que você gostaria que fosse gerado?

A String "J"ohn,son" como argumento 0?

Outra coisa, chamar o split a cada linha é terrívelmente ineficiente. Você vai fazer o java fazer o parse de sua String várias vezes.

Guarde o resultado numa variável, por exemplo:
String campos[] = linhas.split(",");
           temp.setPlayerName(campos[0]);  
           temp.setPlayerId(campos[1]);

OI!
Obrigado pela dica, vou usar ela.
Então, o Johnson é o nome de um jogador.
Esse nome deve ser guardado numa variável,vetor. Nao importa, mas ele deve estar separado em algum atributo.
O problema , é que , o mardito usuário pode colocar virgulas ou " no nome do jogador

Então no caso, é isso mesmo,""A String "J"ohn,son" como argumento 0?""
!!!
Existe um meio de fazer isso ?

ViniGodoy

PS: Se o problema é só na primeira string, e se você conhece o número de campos, você pode separa-los de trás para frente com esse código:

package br.com.guj;

public class splitTest {
	private static String[] split(String linha)
	{
		String campos[] = new String[10];
		for (int i = 0; i < campos.length-1; i++) {
		   campos[campos.length-i-1] = linha.substring(linha.lastIndexOf(",")+1);
		   linha = linha.substring(0,linha.lastIndexOf(","));
		}
		campos[0] = linha;

		return campos;
	}

	public static void main(String[] args) {
		for (String campo : split("\"J\"ohn,son\",18,nva,11,11,3,216,21938.123.213.32,hashcode,[unknown]")) {
			System.out.println(campo);
		}
	}
}

PPS: Se surgirem campos mais complexos do que isso, você deverá montar um analisador léxico. Aí, volte lá nos livros da disciplina de compiladores que você teve na faculdade, e estude!

Criado 2 de setembro de 2012
Ultima resposta 2 de set. de 2012
Respostas 3
Participantes 2