Separar vetor de bytes em subvetor de string

4 respostas
T

olá, pessoal...

algo que parecia trivial ficou complicado aqui pra mim...
e preciso disso urgente, pq estou lendo bytes de um servidor...

seguinte, tenho um vetor de bytes, que so pra teste ta vindo de um
vetor de String... na verdade ele vem de um BufferStream.getBytes();

preciso pegar esse vetor e separar em um vetor de String, a virgula
e o separador de campos e o \n e um novo registro...

por favor, olhem o codigo e me digam onde esta errado!!!

public class FTP {
 
    static String str = "1,Fabio Leandro,100\n2,Robinson,200\n3,PedroErnesto,400\n";
    static byte[] buffer = str.getBytes();
    static int bufferLength = buffer.length;
    static String[] registro;
    
    
    public static void main(String args[]) {
        
        int linhas = 0;
        int colunas = 0;
        
        for (int i=0; i<bufferLength; i++) {
            if (buffer[i] == '\n') {
                linhas++;
            }
        }
        
        int indiceCampo;
        int bufferPos = 0;
        char currentChar;
        String dado = "";
        boolean prox = false;
        for (int i=0; i><linhas; i++) {
            registro = new String[3];
            indiceCampo = 0;
            do {
                currentChar = (char)buffer[bufferPos];
                if (currentChar == '\n') {
                    prox = true;
                    dado  = "";
                    bufferPos++;
                } else if (currentChar == ',' ) {
                    registro[indiceCampo] = dado;
                    dado = "";
                    indiceCampo++;
                    bufferPos++;
                } else {
                    dado += currentChar;
                    bufferPos++;
                }
            } while (prox == false);
            JOptionPane.showMessageDialog(null,registro[0]+"\n"+registro[1]+"\n"+registro[2]);
        }
        
        
        
        System.exit(0);
        
    }
    
    
}
>

4 Respostas

_fs

Por vetor você quer dizer array, certo?

Não sei se entendi o seu problema. Você precisa separar uma String em determinados caracteres? Se for isso, pode usar o método split( String regexp ) que retorna um array de Strings.

Por exemplo:

String s = "lipe,19,analfabeto";
String[] splitted = s.split( "," );

String nome = splitted[ 0 ];
String idade = splitted[ 1 ];
String formacao = splitted[ 2 ];

Isso?

T

Ola LIPE…

nao… nao e separar uma String em arrays de String nao…
e um array de BYTES, ai eu tenho que fazer um tratamento pra
qdo aparecer virgula, comecar a copiar o conteudo do array de bytes
pra proxima posicao do array de String…

vou tentar ser mais claro:

String teste = “1,asdfasd,234,sada\n2,gdgfgd,300,adasd”;
byte arrayDeBytes = teste.getBytes();

eu quero varrer esse arrayDeBytes e obter o segunite em array de String

[1][asdfasd][234][sada]

ai qdo acha “\n” eu volto no loop e comeco a copiar de novo…

[2][gdgfgd][300][adasd]

Entendeu agora?
e tem que ser no braco mesmo, pq e pra PDA… a plataforma que uso
nao tem metodos super uties de manupula;áo de bytes e strings…

cv1

Pra que voce ta convertendo uma String em um array de bytes, e depois transformando em um array de Strings? Trabalhe so com Strings que a dica do Lipe funciona :slight_smile:

Ops. Agora que eu li que voce esta usando J2ME. Bom, nesse caso, voce precisa de dois metodos utilitarios: readLine() e split(). Da pra implementar os dois baseado no codigo que voce postou ai em cima, mas eh melhor separar o trabalho que eles fazem do que deixar tudo numa macarronada so :wink:

T

Olá, pessoal... mais uma vez vou explicar...

e uma plataforma pra PDA, mas nao e J2ME, entretanto a linguagem
é Java sim...

O pq dos bytes é que eu leio esse arquivo de um servidor FTP, e jogo
dentro de um objeto chamado BufferStream... o BufferStream tem um
metodo chamado .getBytes, quem me retorna um array de bytes..

agora preciso varrer esse array de bytes e ir gravando os campos (separados por virgula) dentro de um array de String, pra qdo
esse array estivar completo, chamar mimnha rotina que grava esse
registro no banco de dados do PDA... ai qdo acho \n, continiu no
array de bytes, de onde parei, mas com um array de String novo
(novo registro)... qdo acho \n de novo, minha roitona grava de novo
os campos desse array no banco, e continuo a varre o array de bytes,
sempre copiando cada lina pro vetor de String....

ou seja, e um array de Strings prar armazenar o registro...
a cada virgula copia pro indice do arrary e incrementa o indice do array
achou \n
grava os campos do array de String no banco
e comeca denovo a preencher o array de string
,as de onde parou no array de bytes...

pessoal, se nao estiverem entendendo, ok...
nao precisam masi olhar

sou pessimo pra explicar o que quero emsmo...

VALEU!!!!!!!!111

import javax.swing.*;

public class Ftp {
 
    static String str = "1,Fabio Leandro,100\n2,Robinson,200\n3,PedroErnesto,400\n";
    static byte[] buffer = str.getBytes();
    static int bufferLength = buffer.length;
    
    public static void main(String args[]) {
        
        int linhas = 0;
        int colunas = 0;
        
        for (int i=0; i<bufferLength; i++) {
            if (buffer[i] == '\n') 
                linhas++;
        }
        
        String registro[] = new String[3];
        String dado = "";
        int indiceCampo;
        int bufferPos = 0;
        char currentChar;
        boolean prox = false;
        
        for (int i=0; i><linhas; i++) {
            registro = new String[3];
            indiceCampo = 0;
            do {
                currentChar = (char)buffer[bufferPos];
                if (currentChar == '\n') {
                    registro[indiceCampo] = dado;
                    dado = "";
                    bufferPos++;
                    prox = true;
                } else if (currentChar == ',' ) {
                    registro[indiceCampo] = dado;
                    dado = "";
                    indiceCampo++;
                    bufferPos++;
                } else if (currentChar == ' ') {
                    dado += ' ';
                    bufferPos++;
                } else {
                    dado += currentChar;
                    bufferPos++;
                }
            } while (prox == false);
            
            // Aqui eu chamaria a rotina pra gravacao da linha atual
            JOptionPane.showMessageDialog(null,registro[0]+"\n"+registro[1]+"\n"+registro[2]);
            ////////////////////////////////////////////////////////////////////
        } // FIM DO LOOP
        
        System.exit(0);
        
    }
    
    
}
>
Criado 23 de março de 2005
Ultima resposta 23 de mar. de 2005
Respostas 4
Participantes 3