0

我的问题与 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 语句中使用它时,条件似乎永远不会触发......

这里的任何帮助将不胜感激。

4

2 回答 2

3
if (line=='1')
//do Something
else if (line=="2")
//do something else.

==用于比较引用或原始类型,您可以使用以下方法测试String相等性equals()

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

于 2013-07-11T15:55:29.040 回答
1

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

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

于 2013-07-11T15:53:41.230 回答