Lesen einer Datei - Wort zählen

Status
Nicht offen für weitere Antworten.

Löffler

Mitglied
Hallo

wir sollen ein Programm schreiben welches eine Online .txt Datei liest und ausgibt in wievielen Zeilen das Wort "foren" vorkommt. Ich habe es jetzt geschafft es erstmal hin zu bekommen das er die txt Datei einliest und komplett wieder ausgibt über die Konsole. Nun weiss ich aber nicht weiter wie ich das hinbekomme das er die Zeilen in dem das Wort "foren" vorkommt zählt und nur die Anzahl per Kosole ausgibt.

Java:
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;

public class foren {
    public static void main(String[] args) {
        try {
            String urlName = "[ Adresse entfernt ]";
            URL url = new URL(urlName);
            InputStream inputStream = url.openStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String zeile = bufferedReader.readLine();
            while (zeile != null) {
                System.out.println(zeile);
                zeile = bufferedReader.readLine();
            }
            bufferedReader.close();
        } catch (IOException e) {
            System.err.println("Lesefehler.");
        }
    }
}
 
Zuletzt bearbeitet:
S

SlaterB

Gast
Tipp: wenn du das nun noch 100x testest, dann besser in einem Test-String "foren x foren y foren z";
direkt im Programm, statt für jeden Test das halbe Internet zu bemühen ;)

-------

indexOf im String kann da helfen, gibt verschiedene dieser Methoden, mit unterschiedlichen Parametern..
String (Java Platform SE 6)
 

Löffler

Mitglied
da gibt es schon nen paar Möglichkeiten, habe mir jetzt bisschen was dazu durchgelesen in der API
aber wirklich weiter hat mich das nicht gebracht. Laut API gibt indexOF die erste Position des im String enthaltenen wort aus. Das is auch nicht gerade das was ich suche bzw is mir auch nicht klar wie ich diese Methode überhaupt implementiere.
Ich hab schon lange gebraucht um das überhaupt so hinzu bekommen das er die Datei erstmal vernünftig einliest :D
 
S

SlaterB

Gast
indexOf musst du nicht implementieren, nur aufrufen,
und wie gesagt gibt es mehrere derartiger Methoden, die nicht nur nach dem ersten suchen,

ne Schleife und bisschen Logik gehört natürlich dazu, vollständig erklären kann man es kaum,
wenn man nicht gerade für dich die Aufgabe lösen soll ;)
 

Löffler

Mitglied
will auch net die Lösung, die bringt mir net viel ^^

bzw habe ich mich weiter in das indexof eingearbeitet und mir kam auch schon die Idee ne Schleife zu machen im zusammenhang mit dem indexof...
werd mich noch mal damit beschäftigen und denke mit dem indexof sollte ich das hinbekommen.
Danke für eure Hilfe.
 

w0ddes

Bekanntes Mitglied
es gibt da ne Methode, nennt sich
Code:
contains(Object o)
. Diese durchsucht, ob in einer Collection, auf der diese Methode angewendet wird, das Objekt "o" (das ja auch ein bestimmter String sein kann) enthalten ist und gibt dann true oder false zurück.

siehe: Collection (Java 2 Platform SE 5.0).

Ich selbst würde das z.B. so benutzen:
Java:
int counter = 0;
if (string.toLowerCase().contains("forum"))
{
   counter++;
}
 
Zuletzt bearbeitet:

dngfng

Aktives Mitglied
Java:
	    public int numberOfOccurences(String zeile, String wort) {
	        int count = 0;
	        int pos = zeile.indexOf(wort);
	        while (pos != -1) {
	            count++;
	            pos = zeile.indexOf(wort,++pos);
	 
	            if (pos == -1)
	                break;
	        }
	        return count;
	    }

indexOf(wort) gibt die Erste Index Position zurück an der das Wort gefunden wurde. Falls es nicht gefunden ist der wert -1. Um nach einen weiteren vorkommen zu finden wird einfach die pos verwendet und um eins hoch gesetzt um zu überprüfen ob das Wort nochmals in der Zeile vorkommt.
 
Zuletzt bearbeitet:

Löffler

Mitglied
erstmal danke für eure Vorschläge, doch ich bekomme bei beiden diese Fehlermeldung:
java.lang.NullPointerException
at foren.main(Lorem.java:27)

Warum muss denn hier die NullPointerexception rein bzw warum wird sie ausgelöst? foren ist definitiv in dem robot text enthalten
Java:
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;

public class foren {
    public static void main(String[] args) {
        try {
            String urlName = "http://www.abakus-internet-marketing.de/robots.txt";
            URL url = new URL(urlName);
            InputStream inputStream = url.openStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String zeile = bufferedReader.readLine();

            while (zeile != null) {
               zeile = bufferedReader.readLine();
            }
                  int counter = 0;
                  if (zeile.toLowerCase().contains("foren"))
                  {
                      counter++;
                    }  
          bufferedReader.close();
            
        } catch (IOException e) {
            System.err.println("Lesefehler.");
        }
 
    }
}
 
S

SlaterB

Gast
Zeile 18 bis 20 überschreibt solange die Variable zeile, bis sie endlich null ist (Schleifenbedingung),
dann, wenn sie null ist, greifst du mit contains darauf zu..
 

w0ddes

Bekanntes Mitglied
du musst den Aufruf int counter = 0; vor der while schleife ausführen, und die if-anweisung in die while-schleife packen
 

Dozor

Mitglied
Hi,

zeile 21 auf 17, // ansonsten stellst du es immer auf 0 bzw wenn du es auf 0 setzt ist das File schon zu ende
zeile 19 und 20 nach 25 // ansonsten überliest du gleich die erste Zeile und fängst gleich mit der zweiten an
verschieben
[JAVA=17]
int counter = 0;
while (zeile != null) {
if (zeile.toLowerCase().contains("foren")) {
counter++;
}
zeile = bufferedReader.readLine();
}
[/code]

Gruß
Dozor
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.

Oben