2013-07-11 3 views
0

Мой вопрос связан с тем, как readLine() влияет на текущую позицию в файле.BufferedReader readLine() и перемещение файлов

Скажем, у меня есть файл, который имеет в нем следующее:

, если я скажу

r.readLine() 

, то он вернет "1"

Если я другое

r.readLine() 

Он вернет 'null', поскольку есть только одна строка.

Так что - если я проверить линию в заявлении в то время как так:

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 

Что происходит, что, очевидно, к тому времени я получаю на 2-й проверку, позиция чтения перешла к следующей строке.

Я пытался сделать что-то вроде этого:

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

... Тем не менее, с этим я получаю некоторые очень странные результаты. Если вы можете подтвердить командой System.out.println, что строка «строка» равна, скажем, 1 (или любое другое значение). но когда я пытаюсь использовать его в выражении if, условие никогда не срабатывает ....

Любая помощь здесь будет оценена.

+0

В первом фрагменте кода, вы сравниваете ваши строки, правильно используя 'equals', почему вы изменили его' '== в 2 фрагмент кода? –

+0

Возможный дубликат [Как сравнить строки в Java?] (Http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) –

+0

@RohitJain, может быть, но когда я задал вопрос, я не знал, что правильно не сравниваю строки, поэтому я не спросил «как сравнить строки» - если вы понимаете, что я имею в виду! – Zippy

ответ

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

== используется для сравнения ссылок или примитивных типов, вы можете проверить String равенства с помощью equals():

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

Теперь x == y будет true, becuase они относятся к одному объекту в строке бассейн

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

+1

Спасибо @epoch - этот хороший подробный ответ. – Zippy

+0

нет проблем человек :) – epoch

1

Вы используете неправильное сравнение строк. В вашем втором примере вы должны использовать line.equals(), как и в первом примере, вместо line==. Это должно решить проблему.

Прямо сейчас, это тестирование, если две строки являются одним и тем же объектом, а не содержат ли они одни и те же значения.

+0

Awesome - спасибо, очень много работает :-) – Zippy

+0

Отлично! Рад, что исправил это: D – resueman

Смежные вопросы