La Web del Programador: Comunidad de Programadores
 
    Pregunta:  14011 - MEMORY I/O STREAMS
Autor:  Marisol González
Hola si alguien me puede ayudar con mi siguiente duda se lo agradeceria.
Bueno resulta que necesito saber cómo sacar la información de una variable de tipo ByteArrayOutputStream tengo el siguiente código:

ByteArrayOutputStream bao = new ByteArrayOutputStream();
MiCliente mc = new MiCliente ("Esta10", 0,bao);
screenvar.rfc.setText(bao.toString());
screenvar.nombre.setText(bao.toString());
etc, etc...

pero resulta que en la variable bao recibo toda mi información que estoy accesando desde una tabla en access, pero no se cómo hacerle para ir acomodando cada campo de la información contenida en bao dentro de cada una de mis cajas de texto (que vienen siendo las líneas screenvar.rfc.setText(bao.tostring()); ,screenvar.ident.setText(bao.toString());, etc., etc), en el código que acabo de mostrar lo que hace es almacenar en cada campo toda la cadena de información que contiene la variable bao, es decir, p/e GOFM750922456 MARISELA GOMEZ FLORES ETC, ETC.....
y lo que yo quiero es que por ejemplo en mi caja de texto que correspode al rfc, almacene solo GOFM750922456 , y luego en la caja de texto que corresponde al nombre almacene MARISELA GOMEZ FLORES, y así sucesivamente para todos los demas datos.

Por favor si alguien sabe cómo hacerlo, le pido me lo haga saber lo más pronto posible.

De antemano muchas gracias...!!!

  Respuesta:  David Olivan Ubieto
Veamos, creo que tu principal problemas es extraer del String que te devuelve tu bao con toString () los campos que te interesan. O lo que es lo mismo, dado un String que contiene varios campos o palabras, ir sacando uno a uno. Bien, para ello exista la maravillosa clase StringTokenizer que pasandole un String te va dando cada palabra como un nuevo String. Por ejemplo:
La cadena "Hoy hace calor" con el StringTokenizer obtienes las palabras "Hoy", "hace" y "calor" como Strings, para poder meterlas en tus campos. La clase a cada palabra la llama token. Lo que hace es recorrerla y cuando encuentra un caracter como un espacio, tabulador, enter, ... (un delimitador), te devuelve todo lo anterios sin este caracter como un nuevo String. Tambien te puede devolver el delimitador, pero no es util. Incluso puedes decirle que delimitador usar, asi si le das como argumento " \n\t\r;", te va troceando la String en palabras que esten separadas por espacio en blanco, nueva linea (Enter), tabulador, retorno de carro o un punto y coma, util ello algunos casos. El problema viene cuando un campo esta formado por mas de una palabra, alli si que no hay nada que hacer, pues te devuelve cada palabra. Tu tienes en ese caso que controlar cuantas palabras forman el campo y juntarlas. Si el campo puede tener un numero de palabras variable, necesitas que la String lleve delimitadores de campo, como el punto y coma (por ejemplo: "1324; Pepito Grillo; C/Bajo el puente 69; +34912342345") y este delimitador se lo pasas al StringTokenizer. Para ello deberas en el Access mandar la linea con esos delimitadores, no se si se puede o tendras que hacerlo a pelo concatenando... Otra opcion un poco mas chunga es que el Access te devulelva la informacion en XML y utilices un parser de XML para ir extrayendo los valores de cada campo, para ello la JDK 1.4b incluye ya un parser de XML.

Animo.