-1

我正在尝试读取具有 -

hello James!
How are you today!

我想读取字符串中的每个字符,直到找到 EOL 字符。因为我使用的是 /n/r 代表 EOL 字符的窗口。我如何编写一个条件来遍历字符串的所有字符并打印它们一个接一个,直到达到 EOL(/n/r)。

int readedValue;

do
{   
    while((readedValue = bufferReader.read()) != 10)
   {
    //readedValue = bufferReader.read();
    char ch = (char) readedValue;
    System.out.print(ch);
   } 

}
while ((readedValue = bufferReader.read()) != -1);

当我现在阅读文件时,我会说你好詹姆斯!你今天好吗!

我没有在“如何”中得到“如何”。我可以改变什么来获得完整的文本?

4

3 回答 3

1

正如人们所注意到的,该readline()方法读取到下一行分隔符,并返回删除分隔符的行。因此,您对'\n'and '\r'in的测试line不可能评估为true.

但是当您输出line字符串1时,您可以轻松地添加一个额外的行尾。

1 - 也就是说,除非您确实需要保留与输入流中完全相同的行尾序列字符。

你问:

除了使用readline(),有什么方法可以使用缓冲区阅读器来读取每个字符并打印它们?

是的,当然。该read()方法返回一个字符或-1表示 EOF。所以:

    int ch = br.read();
    while (ch != -1) {
       System.out.print((char) ch);
       ch = br.read();
    }
于 2013-10-02T14:32:33.277 回答
1

你可以使用类似的东西:

while((line=input.readLine())!=null) {
    // do something
}

如果你想逐个字符地读取字符,你可以使用这个:

int readedValue;
while ((readedValue = reader.read()) != -1) {
    char ch = (char) readedValue;
    // do something
}

这是您的新问题的示例(使用字符串而不是文件):

String line;
int readedValue;
String s = "hello James!\n\rHow are you today!";
StringReader input = new StringReader(s);
BufferedReader lineReader= new BufferedReader (input);

while((line=lineReader.readLine())!=null) {
    StringReader input2 = new StringReader(line);
    BufferedReader charReader= new BufferedReader (input2);
    while((readedValue = charReader.read()) != -1) {
        char ch = (char) readedValue;
        System.out.print(ch);
    }
}
于 2013-10-02T14:06:13.177 回答
0

你的问题是关于幻数。

在 charAt(21)!='\n' && charAt(22)!='\r' 的情况下,您的 while 将进入无限循环

这两个整数应在循环内增加。

charAt(i)!='\n' && charAt(i+1)!='\r'
::inside loop
  i++
于 2013-10-02T14:04:46.843 回答