# String nach Schlüsselwörtern durchsuchen und ganze Zeile ausgeben



## Flugpilz (25. Apr 2015)

Hallo, 
ich möchte ein Programm schreiben, dass eine Textdatei ausliest, nach bestimmten Schlüsselwörtern durchsucht und die ganze Zeile, in der eines der Schlüsselwörter steht ausgibt.
Ich habe jetzt die ganze Textdatei ausgelesen und durch diesen Code, den ich im Internet gefunden habe, die Schlüsselwörter herausgesucht:

```
Set<String> searchWords = new HashSet<String>();searchWords.add("test");
searchWords.add("hey");
full = full.replaceAll("[^A-Za-z]", " ").toLowerCase();
StringTokenizer tokenizer = new StringTokenizer(full);
Set<String> extractedWords = new HashSet<String>();
while(tokenizer.hasMoreTokens()) {
	extractedWords.add(tokenizer.nextToken());
}
for(String s : searchWords) {
if(extractedWords.contains(s)) {
System.out.println(s);
```

Mein Problem ist, dass ich nicht weiß, wie man jetzt die ganze Zeile ausgibt, auch wenn sie keine Schlüsselwörter sind???:L

Über Antworten würde ich mich sehr freuen.
LG Flugpilz


----------



## Enceladus271 (25. Apr 2015)

Den Code oben kannst du nicht wirklich verwenden, da man dort eine Menge  von Strings hat ohne Zeileninformationen. Man könnte Folgendes machen:

1.  Den Inhalt der Datei zeilenweise einlesen (z.B. mit BufferedReader.readLine()). Man hat danach also ein String[] in dem die Zeilen  stehen. Falls der gesamte Inhalt der Datei schon als String vorliegt  kann man den String mit String.split am Zeilenumbruch splitten  um die Zeilen zu bekommen.

2. Jede Zeile nach Schlüsselwörtern  durchsuchen. Hierfür würde ich allerdings nicht wie oben mit Tokenizern  arbeiten sondern mit Regulären Ausdrücken  (https://docs.oracle.com/javase/tutorial/essential/regex/). Das ist  deutlich besser und komfortabler.

Als Alternative kann man auch komplett mit regulären Ausdrücken arbeiten.


----------



## Gucky (25. Apr 2015)

Du könntest es mit einem RandomAccesFile versuchen und damit über die Datei iterieren. Dann speicherst du immer das letzte Vorkommen von System.getProperty("line.separator"). Findest du eines der Schlüsselwörter, so gibst du alles aus, von dem letzten Vorkommen des Lineseparators bis zum nächsten Vorkommen.

Eine andere Möglichkeit wäre es mit dem BufferedReader die Datei zeilenweise einzulesen und mit String#contains nach den Wörtern zu suchen.


----------



## InfectedBytes (25. Apr 2015)

An deiner Stelle würde ich die Datei Zeilenweise einlesen und jede Zeile für sich überprüfen.
Also ungefähr so:

```
Scanner scanner = new Scanner(new File("..."));
int lineNumber = 0;
String line;
while (scanner.hasNextLine()) {
	lineNumber++;
	line = scanner.nextLine().replaceAll("[^A-Za-z]", " ").toLowerCase();
	StringTokenizer tokenizer = new StringTokenizer(line);
	while (tokenizer.hasMoreElements()) {
		String token = tokenizer.nextToken();
		if (searchWords.contains(token)) {
			System.out.printf("Token %s found in line %d\n", token, lineNumber);
		}
	}
}
```


----------



## Flugpilz (25. Apr 2015)

Danke für die Rückmeldungen


----------

