2013-07-19 23 views
12

私が示すように、バック定期Stringに私StringReaderを変換しようとしている:私はこのように、この文字列を読み出すしようとすると、StringReaderをStringに変換するにはどうすればよいですか?

String string = reader.toString(); 

しかし:

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

私が得るすべてがあります次のようなポインタ値:

[email protected] 

文字列の読み方に間違いがありますか?

+5

明らかに、あなたはそうです。 http://docs.oracle.com/javase/7/docs/api/java/io/StringReader.html –

+1

読み取りを使用せずに文字列を文字列から戻すことはできません。 – hexafraction

答えて

9

StringReadertoStringメソッドは、StringReader内部バッファを返しません。

これを取得するにはStringReaderから読む必要があります。

文字配列を受け入れるreadのオーバーロードを使用することをお勧めします。一括読み込みは一文字読み込みより高速です。

ie。

//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

実際にStringReaderオブジェクトのtoString()を印刷していますが、StringReaderの内容はStringではありません。

文字列内の実際の文字を読み取るには、read()および/またはread(char[] cbuf, int off, int len)メソッドを使用する必要があります。

1

reader.toString();あなたObjectクラスからジェネリックtoString()メソッドを呼び出した結果が得られます。あなたは、オブジェクトのメモリ位置を表示しますStringReaderオブジェクトのメソッドtoString()を使用する場合は

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

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

配列での一括読み取り一度に1つの文字を読み込むよりも速くなります。 –

0

あなたがread()メソッドを使用することができます。

read() 1文字を読み込みます。

read(char[] cbuf, int off, int len) 文字を配列の一部に読み込みます。ここ

例:

 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

のtoString()メソッドを呼び出すとにStringReaderクラスのオブジェクトを与えます。あなたはこのlinkを使用することができますチュートリアルについては

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

:ヨーヨーは、それがコンテンツだしたいなら、あなたはこのようにStringReaderのreadメソッドを呼び出す必要があります。

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

String string = IOUtils.toString(reader); 
4

それともグーグルグアバライブラリからCharStreamsを使用して:

CharStreams.toString(stringReader); 
3

あなたが外部のライブラリを使用しない場合:

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

hasNext()チェックする理由は、とnext()爆発リーダーが空白(ゼロ長)の文字列をラップする場合はNoSuchElementExceptionです。

関連する問題