"Peter" aus .txt auslesen und Ausgabe der Zeilenanzahl in denen "Peter" vorkommt

Status
Nicht offen für weitere Antworten.

dbohnen

Mitglied
Hallo zusammen,
Ich habe wieder ein kleineres Problem und komme nicht weiter.
Ich soll aus einer .txt-Datei, welche einen beliebigen Blindtext enthält immer das Wort "Peter" auslesen!
Dann soll mir das Programm eine Ausgabe machen. In der Ausgabe soll drinstehen:
"Das Wort 'Peter' ist in xy- Zeilen vorhanden!"

Jetzt mein Problem, mein Programm gibt mir immer den kompletten Text, der in der .txt-Datei drin steht
wieder aus. Ich weiß nicht, wie ich in dem gesamten Text immer nur nach "Peter" suchen soll und dann
auch noch so, dass er mir nur die Anzahlen der Zeilen sagt, in denen "Peter" vorkommt. Wenn Peter in einer Zeile 5 -mal vorkommt, dann ist das in der Ausgabe auch nur "eine Zeile 'Peter'".

Hier mein bisheriger Quelltext:

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

public class blatt7_txtauslesen_test {
	public static void main(String[] args) {
		try {
			String urlName = "http://jpokerpeach.jp.ohost.de/peter.txt";
			URL url = new URL(urlName);
			InputStream PeterURL = url.openStream();
			InputStreamReader PeterURLReader = new InputStreamReader(PeterURL);
			BufferedReader bufferedReader = new BufferedReader(PeterURLReader);			
			String petertxt = bufferedReader.readLine();
			while (petertxt != null) {	
				
				System.out.println(petertxt);
				petertxt = bufferedReader.readLine();
			}	
			bufferedReader.close();
		} catch (IOException e) {
			System.err.println("Lesefehler." +
					"\nHINWEIS: Ein möglicher Fehler kann eine nicht" +
					"vorhandene Internetverbindung sein!");
			}
		
	}
}

Kann mir vielleicht einer helfen, wo mein Fehler ist?
Mfg dbohnen
 

eRaaaa

Top Contributor
so funktionierts:
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
 
public class blatt7_txtauslesen_test {
    public static void main(String[] args) {
        try {
			String urlName = "http://jpokerpeach.jp.ohost.de/peter.txt";
			URL url = new URL(urlName);
			InputStream PeterURL = url.openStream();
			InputStreamReader PeterURLReader = new InputStreamReader(PeterURL);
			BufferedReader bufferedReader = new BufferedReader(PeterURLReader);
			String petertxt = bufferedReader.readLine();
			StringBuilder builder = new StringBuilder(
					"Das Wort 'Peter' ist in Zeile ");
			int counter = 1;
			while (petertxt != null) {
				if (petertxt.contains("Peter")) {
					builder.append(counter);
					builder.append(", ");
				}
				counter++;
				petertxt = bufferedReader.readLine();
			}
			builder.append("vorhanden");
			bufferedReader.close();
			System.out.println(builder);
		} catch (IOException e) {
			System.err.println("Lesefehler."
					+ "\nHINWEIS: Ein möglicher Fehler kann eine nicht"
					+ "vorhandene Internetverbindung sein!");
		}
        
    }
}

was ich gemacht habe:

- in deiner while schleife hast du ja immer petertxt ausgeben lassen, ist ja klar, dass dann der gesamte text ausgegeben wird, weil in petertxt ja immer eine zeile steht.
was musst du also machen? genau, in der zeile schauen, ob das wort peter vorhanden ist
[c]if (petertxt.contains("Peter")) {[/c]

- dann musst du natürlich die zeilen, die du gelesen hast merken [c]int counter =1;[/c] bzw auch hochzählen nachdem eine zeile gelesen wurde [c]counter++[/c]

- die zeilenazahl, jetzt mit dme string "Das Wort 'Peter' ist in Zeile ..." zusammensetzen. dafür habe ich einen stringbuilder benutzt.
Java:
			StringBuilder builder = new StringBuilder(
					"Das Wort 'Peter' ist in Zeile ");
//....
					builder.append(counter);
					builder.append(", ");
 

dbohnen

Mitglied
aha...
ich danke sehr...
das hilft mir schonmal...
dann werde ich jetzt nur noch eine ausgabe basteln, dass er mir nicht die einzelnen zeilen ausgibt (1,2,usw), sondern eine gesamtanzahl.
Das sollte ich schon schaffen:)

Danke für die schnelle Hilfe.
Bis dann.
dbohnen
 

eRaaaa

Top Contributor
aha...
ich danke sehr...
das hilft mir schonmal...
dann werde ich jetzt nur noch eine ausgabe basteln, dass er mir nicht die einzelnen zeilen ausgibt (1,2,usw), sondern eine gesamtanzahl.
Das sollte ich schon schaffen:)

Danke für die schnelle Hilfe.
Bis dann.
dbohnen

achso, ja dann ists natürlich noch einfacher. dann kann der stringbuilder schrott raus. brauchst dann nur dne counter :) (tipp: der muss natürlich dann woanders hochgezählt werden :> )
 

lehvis89

Mitglied
hallo an alle :D ich stehe im moment vor der selben aufgabe,
jedoch komm ich mit meinem zähler nicht zurecht, <.< ich hatte ihn erst in der while schleife, nun danaach, jedoch zählt er bei glaub ich alle zeilen, anstatt, das wort <.<

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

public class bla1 {
  public static void main(String[] args) {
	try {
	    String urlName = "http://www-sst.informatik.tu-cottbus.de/Uebungsmaterial/Programmierpraktikum/lorem.txt";
		URL url = new URL(urlName);
		InputStream inputStream = url.openStream();
		InputStreamReader inputStreamReader =
		new InputStreamReader(inputStream);
		BufferedReader bufferedReader =
		new BufferedReader(inputStreamReader);
		String zeile = bufferedReader.readLine();
		String suchwort = "lorem";
		int anzahl = 0;
		while (zeile != null) {
			if (zeile.contains(suchwort)) {
			}
			anzahl++;
			zeile = bufferedReader.readLine();
			}
		System.out.println(anzahl);	
		bufferedReader.close();  
	  } catch (IOException e) {
		System.err.println("Lesefehler.")
	  }
	}
  }

könnt ihr mir helfen?
ich dachte while (zeile != null) um zu prüfen ob noch eine zeile da ist, und dann in der if- schleife gucken ob das wort enthalten ist..ich glaube/hoffe das ist richtig, nur weiss ich beim counter nicht, wie das funktioniert...
danke schon mal (;
ps:
 

lehvis89

Mitglied
gut hab den zähler ( anzahl++;) jetz in der if- ABFRAGE (-;
als ergebnis erhalte ich nun 0 .
noch nicht ganz mein wunschergebnis xD
denke ich werd gleich schlafen, tut mir und euch sicher gut, morgen nochma rauf schaun^^
bye
 

Ebenius

Top Contributor
als ergebnis erhalte ich nun 0 .
noch nicht ganz mein wunschergebnis xD
Dann schreib doch mal "lorem" in die Datei rein. ;-) Groß-/Kleinschreibung nicht beachtet? Der Code sieht mir soweit richtig aus; ohne ihn probiert zu haben. :) Bis auf das Fehlende Semikolon in Zeile 29.

Ebenius
 
Zuletzt bearbeitet:

Ebenius

Top Contributor
Alle "lorem"s im Text sind groß geschrieben "Lorem". [c]String.contains(CharSequence)[/c] überprüft nur echte Gleichheit.

Ebenius
 

lehvis89

Mitglied
was für ein dummer fehler, und ich häng schon seit 8uhr an der aufgabe xD
recht herzlichen dank, jetzt ist alles richtig (-;
wer lesen kann ist kla im vorteil O,x
nachtle
 
Status
Nicht offen für weitere Antworten.

Oben