Java 我们可以选择/修改readLine()方法开始读取的位置吗?

Java 我们可以选择/修改readLine()方法开始读取的位置吗?,java,io,readline,Java,Io,Readline,我搜索了所有的主题,由于找不到类似的问题,我想问以下问题: 给定示例代码: try (BufferedReader helpRdr= new BufferedReader (new FileReader (helpfile))){ do { //read characters until # is found ch= helpRdr.read();

我搜索了所有的主题,由于找不到类似的问题,我想问以下问题:

给定示例代码:

try (BufferedReader helpRdr= new BufferedReader (new FileReader (helpfile))){

        do {
                                    //read characters until # is found
        ch= helpRdr.read();
                                    //now see if topics match
        if (ch=='#') {

            topic= helpRdr.readLine();
            if (what.compareTo(topic)==0) {                     //found topic

                do {

                    info=helpRdr.readLine();
                    if (info!=null) System.out.println (info);
                } while ((info!=null) && (info.compareTo("")!=0));
和一个示例文件内容:

“#如果 if(条件)声明; else语句; "

问题是:

为什么上面示例中的readLine()方法不读取“#”,而是具有以下输出:if(condition)语句;else语句


提前谢谢大家的帮助

之所以发生这种情况,是因为您已经读取了
字符,因此在执行
read()
readLine()
时不再存在该字符

你能做的是:

String ch = helpRdr.readLine();
if (ch.startsWith("#")) {
 // Do your stuff
}
或者这个:

topic = ch + helpRdr.readLine();

谢谢马克,回答得很好,不过还有一个问题:你说:“你已经读过这个#角色了,因此不在了”——我可以问你在哪里吗?某种堆还是什么?使用
helpRdr.read()
您已经从
BufferedReader
读取了字符
。查看您可以看到
nextChar
增加,这决定了当您执行
read
readLine
等操作时,开始位置是什么。因此,下次开始位置是
1
更高,您将不再获得
字符