StringReader
次のように、背中を通常のに変換しようとしてString
います。
String string = reader.toString();
しかし、この文字列を読み込もうとすると、次のようになります。
System.out.println("string: "+string);
私が得るのは、次のようなポインター値だけです。
java.io.StringReader@2c552c55
文字列を読み返す際に何か間違ったことをしていますか?
StringReader
次のように、背中を通常のに変換しようとしてString
います。
String string = reader.toString();
しかし、この文字列を読み込もうとすると、次のようになります。
System.out.println("string: "+string);
私が得るのは、次のようなポインター値だけです。
java.io.StringReader@2c552c55
文字列を読み返す際に何か間違ったことをしていますか?
のメソッドは内部バッファ を返しませんStringReader
。toString
StringReader
これを取得するには、から読み取る必要がありますStringReader
。
文字配列を受け入れる read のオーバーロードを使用することをお勧めします。一括読み取りは、1 文字の読み取りよりも高速です。
すなわち。
//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);
外部ライブラリを使用したくない場合:
Scanner scanner = new Scanner(reader).useDelimiter("\\A");
String str = scanner.hasNext() ? scanner.next() : "";
hasNext()
チェックの理由は、リーダーが空白 (長さゼロ) の文字列をラップする場合にnext()
爆発することです。NoSuchElementException
またはCharStreams
、Google の Guava ライブラリから使用します。
CharStreams.toString(stringReader);
が読み取っているの内容ではなくtoString()
、実際のStringReader
オブジェクトのを出力しています。String
StringReader
文字列内の実際の文字を読み取るには、read()
および/またはメソッドを使用する必要があります。read(char[] cbuf, int off, int len)