Input/Output Vergleich von identischen Strings schlägt fehl

  • Themenstarter Themenstarter Nutella
  • Beginndatum Beginndatum
N

Nutella

Gast
Hallo Forum,
ich habe folgendes Problem: Ich möchte Daten aus einer Datei mit Hilfe von FileReader und BufferedReader zeilenweise einlesen. Dabei möchte ich in der Datei mit Tags ( in [] eingefasst ) arbeiten. Es soll also erkannt werden ob ein [tag] (oder anderer Name) irgentwo steht und die darauf folgenden Zeilen verarbeitet werden. Das Problem ist, dass das Programm trotz identischer Strings (mit Debugger getestet) die if-Abfragen überspringt. Hier mein Code:
Java:
import java.io.*;

public class BufferedRdr 
{
	public static void main(String[] args) 
	{
		BufferedReader f;
		String str;
		
		try
		{
			f = new BufferedReader(new FileReader("SMS1.txt"));
			
			while((str=f.readLine()) != null)
			{
				
				if(str=="[Message]")
				{
					str=f.readLine();
					System.out.println("Nachricht: " + str);
				}
				
				if(str=="[Contact]")
				{
					str=f.readLine();
					System.out.println("Kontaktname: " + str);
					
					str=f.readLine();
					System.out.println("Kontaktnummer: " + str);
				}
				
				if(str=="[DATE]")
				{
					str=f.readLine();
					System.out.println("Datum: -");
				}
			}
			
			f.close(); 
		}
		
		catch(IOException e)
		{
			System.out.println("Fehler beim lesen der Datei!");
		}
	}
}

Dazu noch der Inhalt der einzulesenden Datei:

Code:
[Message]
Hallo hier bin ich!
[Contact]
Steffan Helmke
042839988
[DATE]

Wenn ich mit den Zeilennummern von LineNumberReader arbeite funktioniert es, aber ich will das man die tags in der Reihenfolge vertauschen kann und das leere Zeilen dazwischen sein können.
Ich vermute das es etwas mit der Konvertierunt zwischen String und Byte-Streams zu tun hat, aber ich kann mir echt nicht erklären was!

Freu mich auf die Antworten!
Gruß
Nutella
 
Noch eine Anmerkung:

wenn Du den Vergleich mit der Konstante beginnst, kann das Variable Argument auch null sein, ohne dass es knallt:

Java:
if ("Wert".equals( str )) {
}

.. habe ich mir so angewöhnt, auch z.B.

Java:
if (0 == i) {
}

ist im ersten Moment gewöhnungsbedürftig, aber leichter zu lesen...
 
Noch eine Anmerkung:

wenn Du den Vergleich mit der Konstante beginnst, kann das Variable Argument auch null sein, ohne dass es knallt:

Das ist sicherlich richtig, aber wenn an der Stelle niemals null auftreten soll, dann ist da eine geworfene NPE schon besser, als ein durchlaufendes Programm welches falsche Werte ausgibt oder eine NPE die später erst zündet und dann zurückverfolgt wird.
Nur um die Aussage zu relativieren.
 
@Njans:
völlig richtig, das ist nur sinnvoll, wenn der String null sein darf.
sonst muss man natürlich auf null testen und den Caller mit einer Exception bewerfen.
Schlampig von mir...

Ich beginne trotzdem alle Identitätsvergleiche (==, !=, .equals) mit dem konstanten Wert, würde bei mir auch so aussehen:
Code:
 if (null == text)
habe ich mir in C angewöhnt (grins...)
 

Neue Themen


Zurück
Oben