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

Flugpilz

Mitglied
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:
Java:
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
 
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.
 
Zuletzt bearbeitet:
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.
 
An deiner Stelle würde ich die Datei Zeilenweise einlesen und jede Zeile für sich überprüfen.
Also ungefähr so:
Java:
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);
		}
	}
}
 
Zuletzt bearbeitet:

Zurück
Oben