Lesen aus .txt und vergleichen

04/03/2015 16:18 EinfachSö#1
Hallo,

Ich habe ein kleines Funktionalitätsproblem.

Ich habe eine .txt-Datei, in der zeilenweise "true" oder "false" steht.
Nun möchte ich in einer Methode diese Zeilen auslesen. Wenn in Zeile x "true" steht soll xy gemacht werden. Wenn dort "false" steht etwas anderes.
Hier meine Herangehensweise:

Code:
for(int i = 0; i < number; ++i) //Zeilen bis hin zu der gewünschten werden ignoriert.
	br.readLine();
	String lineIWant = br.readLine(); //Ausgabe der Zeile, die gewünscht ist!
	br.close();
			
	// In .txt-Datei steht ob Zahl =prim oder nicht. Falls ja, dann gib true zurück. Andernfalls false!!!
	lineIWant = lineIWant.replace("\n", ""); //Befürchtung: Zeilenumbruch ist das Problem!
	setReturn(lineIWant);
Die Methode "setReturn" überprüft die Zeile nun auf den Inhalt.
Code:
public void setReturn(String line)
	{
		if (line == "true")
		{
			returnvar = true;
		}
		else
		{
			returnvar = false;
		}
	}
Mein Bedenken ist, dass ich so auch den Zeilenumbruch mitlese. Ich habe die.trim()-Methode probiert oder wie oben die replace()-Methode.
Auch if (line == "true\n") funktioniert nicht wie gewünscht.
Es wird immer "false" returned.

Aufbau der Text-Datei (Beispiel):
Code:
false
true
true
false
true
false
true
false
false
false
true
false
true
false
false
false
true
false
true
Wie kann ich das Problem lösen. Oder gibt es einfachere Wege dies zu lösen?
Ich habe der Übersicht halber den restlichen Code weggelassen. Ich weiß, dass das Problem bei der Überprüfung per if-Schleife liegt.

Got it!

Code:
public void setReturn(String line)
{
	Boolean boolean1 = Boolean.valueOf(line);
	if (boolean1)
	{
		returnvar = true;
	}
	else
	{
		returnvar = false;
	}
}
04/03/2015 17:13 Zunft#2
Quote:
Originally Posted by EinfachSö View Post
Code:
public void setReturn(String line)
	{
		if (line == "true")
		{
			returnvar = true;
		}
		else
		{
			returnvar = false;
		}
	}
Für die Zukunft (Die Lösung hast du ja schon):

Strings werden in Java nicht mit '==' verglichen. Dann nutzt du entweder:

Code:
if(s.equals("false"))
oder um die Gefahr von eingelesenen zusätzlichen Leerzeichen, Zeilenumbrüchen, etc. zu umgehen:

Code:
if(s.contains("false"))
Quote:
Originally Posted by EinfachSö View Post
Ich weiß, dass das Problem bei der Überprüfung per if-Schleife liegt.
Dafür müsstest du mir jetzt eigentlich all dein e*Gold als Strafe geben.
04/03/2015 17:15 snow#3
Code:
	Boolean boolean1 = Boolean.valueOf(line);
	if (boolean1)
	{
		returnvar = true;
	}
	else
	{
		returnvar = false;
	}
Warum nicht

Code:
returnvar = Boolean.valueOf(line);
?
04/03/2015 17:34 EinfachSö#4
Danke beiden!
@Zunft :facepalm: Hätte mir früher auffallen müssen.

Quote:
Originally Posted by snow View Post
Warum nicht

Code:
returnvar = Boolean.valueOf(line);
?
Logisch. :D
Wald vor lauter Bäumen...



Ganz nebenbei noch eine Frage.
Ich habe die Deklaration der Variablen in eine extra Methode packen müssen, weil es nach der for-Schleife nicht funktioniert hat.
Die for-Schleife und der kleine Rest dahinter befindet sich ein einem try-Block. Kann ich den Schritt mit einer seperaten Methode umgehen? Also, dass ich "returnvar" direkt im try-Block deklariere?

Ganzer Code:

Diese Fälle wurden in meinem Tutorial nie erwähnt.

Quote:
Originally Posted by Zunft View Post
Dafür müsstest du mir jetzt eigentlich all dein e*Gold als Strafe geben.
:o nicht nachgedacht...
04/03/2015 17:43 Zunft#5
Du kannst dir die ganze returnvar-Variable sparen:

Code:
public boolean setReturn(String line)
	{
		return Boolean.valueOf(line);
	}
bzw

Code:
setReturn(lineIWant);
ersetzen mit:

Code:
return setReturn(lineIWant);
Quote:
Diese Fälle wurden in meinem Tutorial nie erwähnt.
[Only registered and activated users can see links. Click Here To Register...]
04/03/2015 18:13 EinfachSö#6
Quote:
Originally Posted by Zunft View Post
Du kannst dir die ganze returnvar-Variable sparen:

Code:
public boolean setReturn(String line)
	{
		return Boolean.valueOf(line);
	}
bzw

Code:
setReturn(lineIWant);
ersetzen mit:

Code:
return setReturn(lineIWant);


[Only registered and activated users can see links. Click Here To Register...]
Das Problem ist aber, wenn Ich:
Code:
return setReturn(lineIWant);
benutze, dann entweder im try-Block oder dahinter.
Meinen ganzen Code habe ich im vorherigen Post ja gespoilert.
Wenn ich es im try-Block nutze, dann bekommt meine Class "CheckNumIfPrimeBoolean" einen Error. ("This method must return a result of type boolean").
Packe Ich deinen return-Befehl hinter den try-Block, so hat meine Class zwar einen return aber "lineIWant cant be resolved to a variable". lineIWant ist ja lokal im try-Block deklariert.
04/03/2015 19:22 Zunft#7
In dem Fall würde ich es genauso wie du lösen. Die boolesche Variable global bzw. vor dem betreffenden Block deklarieren.