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



## dbohnen (4. Dez 2009)

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:


```
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 (4. Dez 2009)

so funktionierts:

```
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. 

```
StringBuilder builder = new StringBuilder(
					"Das Wort 'Peter' ist in Zeile ");
//....
					builder.append(counter);
					builder.append(", ");
```


----------



## dbohnen (4. Dez 2009)

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 (4. Dez 2009)

dbohnen hat gesagt.:


> 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.
> ...



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 (7. Dez 2009)

hallo an alle  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 <.<


```
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:


----------



## Ebenius (7. Dez 2009)

lehvis89 hat gesagt.:


> [...] und dann in der if- schleife [...]


Schon wieder die if-schleife. ;-)

Ich hab mir den Code nicht genau angesehen, aber ein offensichtlicher Fehler: Du hast zwei Zeilen verwechselt; 22 und 23...

Ebenius


----------



## lehvis89 (7. Dez 2009)

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 (7. Dez 2009)

lehvis89 hat gesagt.:


> 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


----------



## Ebenius (7. Dez 2009)

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

Ebenius


----------



## lehvis89 (7. Dez 2009)

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


----------

