0

我必须使用字符串阅读器类逐个字符地读取字符串。我写了这段代码:

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

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

4

2 回答 2

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();
于 2016-02-04T21:24:00.073 回答
0

ready方法告诉您下一次调用是否read不会阻塞。

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

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

当您在每个循环中调用两次时,您正在跳过字符read——一次在while条件中,一次在正文中。而是将其分配给变量。

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

你也可以做你通常会做的任何其他类型的事情Reader——将它包装在 a 中BufferedReader,这样你就可以调用nextLine或将它包装在 a 中Scanner

BufferedReader bf = new BufferedReader(stringReader);

或者

Scanner strScanner = new Scanner(stringReader);
于 2016-02-04T21:28:48.387 回答