2013-07-19 19 views
12

Ich versuche, meine StringReader in eine reguläre String, zu konvertieren, wie gezeigt:Wie konvertiere ich einen StringReader in einen String?

String string = reader.toString(); 

Aber wenn ich versuche, diese Zeichenfolge aus zu lesen, wie folgt aus:

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

Alles, was ich bekommen ist ein Zeigerwert wie folgt:

[email protected] 

Mache ich etwas falsch beim Lesen der Schnur zurück?

+5

Sie sind eindeutig. http://docs.oracle.com/javase/7/docs/api/java/io/StringReader.html –

+1

Sie können die Zeichenkette nicht von einem stringreader zurückholen, ohne Lese zu verwenden (. – hexafraction

Antwort

9

Die StringReadertoString Methode gibt die internen Puffer StringReader nicht zurück.

Sie müssen aus dem StringReader lesen, um dies zu bekommen.

Ich empfehle die Verwendung der Überladung von lesen, die ein Zeichen-Array akzeptiert. Massenlesevorgänge sind schneller als Einzelzeichenlesevorgänge.

dh.

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

Sie drucken die toString() des eigentlichen StringReader Objekt aus, nicht der Inhalt des String, dass die StringReader liest.

Sie müssen die Methoden read() und/oder read(char[] cbuf, int off, int len) verwenden, um die tatsächlichen Zeichen im String zu lesen.

1

reader.toString(); geben Ihnen die Ergebnisse der generischen toString() Methode von Object Klasse aufrufen.

können Sie die read() Methode verwenden:

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

} while (i != -1); 
+0

Ein Massenlesen mit einem Array wird Sei schneller als ein einzelnes Zeichen gleichzeitig zu lesen. –

0

Wenn Sie die Methode toString() in einem StringReader-Objekt verwenden, wird die Speicherposition des Objekts drucken. Sie haben eine dieser Methoden verwendet:

read() Liest ein einzelnes Zeichen.

read(char[] cbuf, int off, int len) Liest Zeichen in einen Teil eines Arrays.

Hier ein Beispiel:

 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(); 
    } 
1

Aufruf toString() -Methode wird das Objekt der Stringklasse geben. Wenn yo es ist Inhalt wollen, dann müssen Sie die Lesemethode auf String so nennen:

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

Für Tutorials können Sie diese link verwenden.

20
import org.apache.commons.io.IOUtils; 

String string = IOUtils.toString(reader); 
4

Oder mit CharStreams von Googles Guava Bibliothek:

CharStreams.toString(stringReader); 
3

Wenn Sie es vorziehen, nicht externe Bibliotheken verwenden:

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

Der Grund für die hasNext() Prüfung ist, dass next() explodiert mit einem NoSuchElementException, wenn der Leser eine leere Zeichenfolge (Länge null) umschließt.

Verwandte Themen