Как преобразовать 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();
}