Как преобразовать StringReader в String?

Я пытаюсь преобразовать свой StringReader обратно в обычный String, как показано:

String string = reader.toString();

Но когда я пытаюсь прочитать эту строку, вот так:

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

Все, что я получаю, это значение указателя, например:

[email protected]

Я делаю что-то неправильно, читая строку обратно?

Ответ 1

Метод StringReader toString не возвращает внутренние буферы StringReader.

Вам нужно будет прочитать из StringReader, чтобы получить это.

Я рекомендую использовать перегрузку чтения, которая принимает массив символов. Массовые чтения быстрее, чем однозначные.

т.

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

Ответ 2

import org.apache.commons.io.IOUtils;

String string = IOUtils.toString(reader);

Ответ 3

Или используя CharStreams из Googles. Библиотека Guava:

CharStreams.toString(stringReader);

Ответ 4

Если вы предпочитаете не использовать внешние библиотеки:

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

Причиной проверки hasNext() является то, что next() взрывается с помощью NoSuchElementException, если читатель обертывает пустую (нулевую) строку.

Ответ 5

reader.toString(); предоставит вам результаты вызова общего метода toString() из класса Object.

Вы можете использовать метод read():

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

} while (i != -1);   

Ответ 6

Вызов метода toString() даст объект класса StringReader. Если вы хотите получить контент, то вам нужно вызвать метод чтения в StringReader следующим образом:

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

В учебниках вы можете использовать ссылку .

Ответ 7

Вы печатаете toString() фактического объекта StringReader, а не содержимое String, которое читает StringReader.

Вам нужно использовать методы read() и/или read(char[] cbuf, int off, int len) для чтения фактических символов в строке.

Ответ 8

Если вы используете метод toString() в объекте StringReader, вы будете печатать позицию памяти объекта. Вы используете один из следующих способов:

read() Читает один символ.

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