read parser parsear from example java string tostring stringreader

parser - string xml in java



¿Cómo convierto un StringReader a un String? (9)

El método toString del StringReader no devuelve los StringReader internos del StringReader .

Tendrá que leer del StringReader para obtener esto.

Recomiendo usar la sobrecarga de lectura que acepta una matriz de caracteres. Las lecturas masivas son más rápidas que las lecturas de un solo carácter.

es decir.

//use string builder to avoid unnecessary string creation. StringBuilder builder = new StringBuilder(); int charsRead = -1; char[] chars = new char[100]; do{ charsRead = reader.read(chars,0,chars.length); //if we have valid chars, append them to end of string. if(charsRead>0) builder.append(chars,0,charsRead); }while(charsRead>0); String stringReadFromReader = builder.toString(); System.out.println("String read = "+stringReadFromReader);

Estoy tratando de convertir mi StringReader nuevo a una String normal, como se muestra:

String string = reader.toString();

Pero cuando intento leer esta cadena, así:

System.out.println("string: "+string);

Todo lo que obtengo es un valor de puntero, como este:

java.io.StringReader@2c552c55

¿Estoy haciendo algo mal al leer la cadena de nuevo?


Estás imprimiendo la toString() del objeto StringReader real, NO el contenido de la String que está leyendo el StringReader .

read(char[] cbuf, int off, int len) métodos read() y / o read(char[] cbuf, int off, int len) para leer los caracteres reales en la cadena.


Llamar al método toString () le dará al objeto de la clase StringReader. Si desea que esté satisfecho, debe llamar al método de lectura en StringReader de la siguiente manera:

public class StringReaderExample { public static void main(String[] args) { String s = "Hello World"; // create a new StringReader StringReader sr = new StringReader(s); try { // read the first five chars for (int i = 0; i < 5; i++) { char c = (char) sr.read(); System.out.print("" + c); } // close the stream sr.close(); } catch (IOException ex) { ex.printStackTrace(); } } }

Para tutoriales puedes usar este link .


O usando CharStreams de la CharStreams de CharStreams Guava:

CharStreams.toString(stringReader);


Otra solución nativa (Java 8+) podría ser pasar el objeto StringReader a un BufferedReader y stream través de las líneas:

try (BufferedReader br = new BufferedReader(stringReader)) { br.lines().forEach(System.out::println); }


Si prefieres no usar bibliotecas externas:

Scanner scanner = new Scanner(reader).useDelimiter("//A"); String str = scanner.hasNext() ? scanner.next() : "";

El motivo de la comprobación hasNext() es que next() explota con una NoSuchElementException si el lector ajusta una cadena en blanco (de longitud cero).


Si usa el método toString() en un objeto StringReader , imprimirá la posición de memoria del objeto. Tienes que usar uno de estos métodos:

read() Lee un solo carácter.

read(char[] cbuf, int off, int len) Lee caracteres en una parte de una matriz.

Aquí un ejemplo:

String s = "Hello World"; // create a new StringReader StringReader sr = new StringReader(s); try { // read the first five chars for (int i = 0; i < s.length(); i++) { char c = (char) sr.read(); System.out.print("" + c); } // close the stream sr.close(); } catch (IOException ex) { ex.printStackTrace(); }


reader.toString(); le dará los resultados de llamar al método genérico toString() desde la clase Object .

Puedes usar el método read() :

int i; do { i = reader.read(); char c = (char) i; // do whatever you want with the char here... } while (i != -1);


import org.apache.commons.io.IOUtils; String string = IOUtils.toString(reader);