StringTokenizer JAVA

hallo ich habe folgendes problem und zwar möchte ich aus einer textdatei ein Wort suchen und das möcht ich so machen:
Ich lese das File zeilenweise ein und zerlege dann immer die Zeile mit dem stringtokenizer, das geht ja noch ganz gut aber nun habe ich eine IF abfrage hinzugefügt if (st.nextToken() == "tester")
System.out.println("Da is er ja!!");

und da fängt er zu spinnen an. Wenn ich debuge springt er in die Class StringTokenizer.class dann Thread.class und dann die Fehlermeldung

anbei der code und die fehlermeldung


import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Uebersicht {
public static void main(String args[]) throws Exception {

BufferedReader in = new BufferedReader(new InputStreamReader(
new FileInputStream("c:\\gala.txt")));
//BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
// new FileOutputStream("c:\\MyFile1.txt")));
String s = in.readLine();
StringTokenizer st = new StringTokenizer(in.readLine());

while (s != null) {
//while (s != null) {
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
if (st.nextToken() == "tester")
System.out.println("Da is er ja!!");

}
st = new StringTokenizer(s);
s = in.readLine();

//}

//s = in.readLine();
}

in.close();

// out.write(s);
// out.newLine();
//out.close();

}

}








Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(Unknown Source)
at Uebersicht.main(Uebersicht.java:28)
 
Code:
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
if (st.nextToken() == "tester")
System.out.println("Da is er ja!!");
}
in dem teil des codes holst du dir 2 mal nacheinander das nächste token. denke nicht dass das so beabsichtigt ist.
soll wohl eher so aussehen:
Code:
while (st.hasMoreTokens()) {
String token = st.nextToken();
System.out.println(token);
if (token.equals("tester"))
System.out.println("Da is er ja!!");
}
beachte dass man in java mit == instanzen vergleicht, also ob diese ein und dasselbe objekt sind. du willst aber bestimmt die strings inhaltlich vergleichen. dies macht man mit der funktion equals().
 
Wie Ivegotmail schon gesagt hat, du holst dir zweimal den nächsten Token und bist damit einen zu weit. Außerdem werden Strings mit equals vergleicht. Natürlich hab ich auch noch was anzumerken damit dass net als Spam-Post abgetan wird ;)

- Benutzung von Code-Tags macht das ganze enorm übersichtlicher
- In deinen Dateipfad solltest du statt \\ (sprich \ => normaler Windows Fileseparator) z. B. System.getProperty("file.separator";); verwenden. Damit machst du das ganze auch Systemunabhängig, was ja der große Vorteil von Java ist ;)
- du liest hier eine Zeile und gleich danach die nächste. Ich denke nicht, dass das so gedacht ist (schau dir dazu mal die 1. Anmerkung von Ivegotmail an)
Code:
 String s = in.readLine();
StringTokenizer st = new StringTokenizer(in.readLine());
- Eine Schleife zum Auslesen einer Datei konstruiert man normalerweiße so (ist aber nur Code-kosmetik) ;)
Code:
while ((s = in.readLine()) != null)
{// hier wird dann nicht nochmal s = in.readLine() aufgerufen}
- Du solltest eine Exception IMMER abfangen und nicht nur ständig throws Exception coden. dadurch wird die Exception nämlich nur an die aufrufende Methode weitergeleitet und ich glaube kaum, dass über public static void main(String[] args) noch ne Methode steht, die diese dann aufruft (verdammt kompliziert geschrieben, ich hoffe du kannst es einigermaßen nachvollziehen ;))- Wenn man eine Exception wirft oder abfängt sollte man auch immer nur die Exception (oder ggf. mehrere) abfangen bzw. werfen die auch wirklich auftreten können und net einfach nur Exception.

Hoffe ich konnte dir weiterhelfen.

[edit] nochmal @ admins, steht schon im Feedback Forum. Manchmal werden beim Erweiterten Editor auf mysteriöse Weiße Zeilenumbrüche einfach entfernt.
 
Zurück
Oben