如何在Java中使用StringReader类读取String?

时间:2016-02-04 21:19:46

标签: java stream stringreader

我必须使用String Reader类通过char读取String char。我写了这段代码:

String string = "Hello, World!";
StringReader stringReader = new StringReader(string);

while(stringReader.ready())
{
   System.out.println(stringReader.read());
}

但是循环并没有以字符串的结尾结束,它是无限的!为什么呢?

我也尝试过这样做:

while(stringReader.read()!=-1)
{
   System.out.println(stringReader.read());
}

循环不是无限的......但它会跳过一些字符......我怎样才能读取所有字符串?

2 个答案:

答案 0 :(得分:0)

试试这个:

    String str = "Hello, World!";

    //Create StringReader instance
    StringReader reader = new StringReader(str);
    int c = reader.read();
    while (c != -1){
        //Converting to character
        System.out.print((char)c);
        c = reader.read();
    }
    //Closing the file io
    reader.close();

答案 1 :(得分:0)

ready method会告诉您下次调用read是否会阻止。

  

返回:   如果保证下一个read()不阻止输入,则返回true,否则返回false。

一旦到达字符串的末尾,它肯定不会阻塞;你已到达字符串的末尾。使用String,内容已经存在;对于StringReadertrue应始终返回ready

当您在每个循环中调用read两次时,您正在跳过字符 - 一次处于while状态,一次处于正文状态。将其分配给变量。

int c;
while((c = stringReader.read()) !=  -1)
{
    System.out.println((char) c);
}

您也可以执行通常执行的任何其他Reader - 将其包裹在BufferedReader中,以便您可以调用nextLine或将其包装在{{1}中}}

Scanner

BufferedReader bf = new BufferedReader(stringReader);