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);