Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Guten Tag,
Hab noch nicht viel mit Java gearbeitet und jetzt wollte ich ein Programm schreiben, dass eine Verbindung zu einem Text herstellt und diesen dann Zeile für Zeile einliest. Dabei kann man eine gewünschte Zeichenkette eingeben, von der dann die Zeile und die dazugehörige Position ausgegeben wird.
Die Ausgabe stimmt schon mal, nur versteh ich die Fehlermeldung nicht. Bitte um Hilfe in leicht vertsändlicher Sprache...Danke im Voraus!!!
Zeile 29 wird hierbei immer als Fehlerquelle angegeben:
Java:
index = line.indexOf(zeichen_kette, index);
Java:
import java.io.*; //BufferedReader importieren
public class Bsp06 {
public static void main (String[] args) throws IOException {
//fuer Fehlermeldungen
String fileName, zeichen_kette;
String line = "anfang";
int index = 0, anz_zeile = 1;
System.out.println("welche Textdatei?");
fileName = SavitchIn.readLine();
System.out.println("zu suchende Zeichenkette?");
zeichen_kette = SavitchIn.readLine();
//noetige Deklaration zur Verbindung mit Filenamen
BufferedReader input =
new BufferedReader(new FileReader(fileName));
//liest eine Zeile aus Textdatei
//Ergebnistyp: Zeile als String
//oder null wenn am Fileende
while (line != null) {
line = input.readLine();
anz_zeile++;
index = line.indexOf(zeichen_kette, index);
if (index != -1){
System.out.print("\n" +"Zeile " + anz_zeile + ":");
System.out.print(" " + (index+1));
while (index != -1) {
index++;
index = line.indexOf(zeichen_kette, index);
if (index != -1)
System.out.print(" " + (index+1));
}
}
}
input.close(); //Dateiverbindung schliessen
}
}
Ausgabe:
Java:
welche Textdatei?
Zeichentreppe.java
zu suchende Zeichenkette?
zeile
Zeile 21: 15 26 42
Zeile 22: 39Exception in thread "main" java.lang.NullPointerException
at Bsp06.main(Bsp06.java:29)
Kann es sein, dass du bereits am Ende der Datei angekommen bist und daher bei "input.readLine();" (Zeile 27) null zurück gegeben wird?
Dann kann in Zeile 29 bei "index = line.indexOf(zeichen_kette, index);" auch nicht darauf zugegriffen werden und du bekommst eine "NullPointerException". Guck dir die Stelle am besten einfach mal im Debugger an
Wie sieht denn die Datei aus, die du einliest?
Ohne die Datei zukennen ist es schwer zu sagen, warum er jetzt aufhört, da nicht klar ist, was er z.B. noch finden müsste.
Entfern mal Zeile 28 (line = input.readLine()), wenn du dir mal Zeile 26 anschaust, wirst du den gleichen Befehl sehen. Das heißt du durchläufst jetzt nur noch jede zweite Zeile, weil du bei jedem Schleifendurchlauf zwei Zeilen liest, die erste davon aber direkt überschreibst. Dadurch erhählst du bei der Ausgabe nur den halben Wert bei der Zeile und jede zweite Zeile wird nicht gefunden.