【问题标题】:BufferedReader readLine() and moving through filesBufferedReader readLine() 并在文件中移动
【发布时间】:2013-07-11 15:52:38
【问题描述】:

我的问题与 readLine() 如何影响文件中的当前位置有关。

假设我有一个文件,其中包含以下内容:

1

如果我说

r.readLine()

那么它将返回“1”

如果我再做一个

r.readLine()

它将返回“null”,因为只有一行。

所以 - 如果我在这样的 while 语句中检查该行:

while (r.readLine!=null){
//Do something here

}

所以这应该一直运行到它遇到一个空行然后退出。

但是,如果我想做类似的事情:

String line;

if ((line = r.readLine()).equals("1"))
//Then do something....
else if ((line = r.readLine()).equals("2"))
//Then do something else

显然,当我进行第二次检查时,读取位置已移至下一行。

我试着做这样的事情:

String line = r.readLine();
if (line=='1')
//do Something
else if (line=="2")
//do something else.

...但是,我得到了一些非常奇怪的结果。如果可以使用 System.out.println 命令确认字符串 'line' 等于 1(或任何值)。但是当我尝试在 if 语句中使用它时,条件似乎永远不会触发......

我们将不胜感激。

【问题讨论】:

  • 在第一个 sn-p 中,您使用 equals 正确比较了您的字符串,为什么在第二个 sn-p 中将其更改为 ==
  • @RohitJain,也许,但是当我问这个问题时,我不知道我没有正确比较字符串,因此我没有问“我如何比较字符串” - 如果你明白我的意思!

标签: java file io bufferedreader readline


【解决方案1】:
if (line=='1')
//do Something
else if (line=="2")
//do something else.

== 用于比较引用或原始类型,您可以使用equals() 来测试String 是否相等:

String x = "hello";
String y = "hello";

现在x == y 将是true,因为它们引用了字符串池中的同一个对象

String x = "hello";
String y = new String("hello");

现在x == y 将变为false,因为它们不再指向同一个对象,一个在字符串池中,而另一个不在。

要正确测试使用equals(String):

String x = "hello";
String y = new String("hello");

x.equals(y);

将评估为true

【讨论】:

    【解决方案2】:

    您使用了错误类型的字符串比较。在您的第二个示例中,您应该使用line.equals(),就像您在第一个示例中所做的那样,而不是line==。这应该可以解决问题。

    现在,它正在测试两个字符串是否是同一个对象,而不是它们是否包含相同的值。

    【讨论】:

    • 太棒了!很高兴修复它:D
    猜你喜欢
    • 1970-01-01
    • 2013-03-09
    • 2016-01-08
    • 2018-09-26
    • 2021-01-26
    • 1970-01-01
    • 2013-08-10
    • 2015-06-07
    • 2021-04-15
    相关资源
    最近更新 更多