Reguläre Ausdrücke

bLaSt

Aktives Mitglied
Hey Leute,

ich habe folgendes Problem. Und zwar möchte ich über einen regulären Ausdruck Wörter mit einem bestimmten Schema in einem Text heraussuchen und dann in eine Datei schreiben.
Leider habe ich dazu nichts gefunden.
Es gibt ja mehrere Varianten um über reguläre Ausdrücke Wörter zu suchen:
Java:
//1. Suche mit contains
		System.out.println(" Die Daten enthalten den Text 'huhu' " + daten.contains("huhu"));
		
		//2. Suche (Variante 1) 
		boolean isGueltig = daten.matches("([a-zA-Z]|\\s)*");
		System.out.println("Die Daten passen " + isGueltig);
		
		//3. Suche (Variante 2)
		Pattern pattern = Pattern.compile("([a-zA-Z]|\\s)*");
		Matcher matcher = pattern.matcher(daten);
		System.out.println("Die Daten passen " + matcher.matches());
		
		//4. Suchen und ersetzen (206 -> 7777)
		daten = "+49-7531-206-206";
		daten = daten.replaceAll("(\\+49-7531)-(206)-(\\d+)", "$1-7777-$3");
		System.out.println("Neue Telefonnummer ist " + daten);

Nun habe ich halt das Problem,dass diese Methoden keinen String zurückgeben den ich in eine Datei schreiben könnte. Daher wollte ich euch mal Fragen, ob ihr mir da helfen könnt.

Greez blast
 
Wenn [c]matches()[/c] [c]true[/c] zurückliefert, ist doch bereits der gesamte String dein Suchresultat. Ich verstehe nicht, was du genau machen willst.
Abgesehen davon kann man [c]"([a-zA-Z]|\\s)*"[/c] auch einfacher als [c]"[a-zA-Z\\s]*"[/c] schreiben.
 
Wenn du nur Teilbereiche des Strings matchen willst, helfen dir die Methoden Matcher#find(), Matcher#group(), Matcher#start() und Matcher#end().
 
Aber das Resultat von beispielsweise:
Java:
 boolean isGueltig = daten.matches("([a-zA-Z]|\\s)*");
        System.out.println("Die Daten passen " + isGueltig);
ist ja ein boolean. Aber ich will ja nicht nur wissen ob er eines der Wörter gefunden hat, sondern ich will das explizite Wort dass gefunden wurde in eine Datei scheiben. Also brauche ich etwas mit dem Rückgabewert String, aber das gibt er mir bei den Methoden nicht zurück. Sondern nur true oder false. Zumal war das ja nur ein Beispiel welche Suchverfahren es gibt, dass ist ja nicht direkt mein Code den ich habe. hier mal mein konkreter Code:
Java:
package uebung17;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class TextDateiEinlesen {
	public static void main(String[] args) {
		// Erzeugen einer Datei in die nachher die gefundenen Wörter geschrieben
		// werden
		File file = new File("C:\\Temp\\Suchergebnis.txt");
		// Einlesen der Zeichen für die gesamte Dateilänge
		FileReader fr;
		try {
			fr = new FileReader("C:\\Temp\\Gesetz.txt");

			BufferedReader br = new BufferedReader(fr);

			String zeile = "";

			do {
				zeile = br.readLine();
                                //Mein bisheriger Versuch das Wort in die entsprechende Datei zu schreiben
				if (zeile.matches("[a-z].*")) {
					String dateiName = "C:\\Temp\\Suchergebnis.txt";
					FileOutputStream schreibeStrom = new FileOutputStream(
							dateiName);
					for (int i = 0; i < zeile.length(); i++) {
						schreibeStrom.write((byte) zeile.charAt(i));
					}
					schreibeStrom.close();
					// FileWriter out = new FileWriter("Suchergebnis.txt");
					// out.append(zeile);
					// out.write(zeile);
					// out.close();
				}
                                //Das ist eine anderer Aufgabenteil, der aber schon passt
				zeile = zeile.replaceAll("(.*) (\\() (\\d+) (\\)) (.*)",
						"$1[$3]$5");
			} while (zeile != null);

			br.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
 
Du meinst so etwas?

Java:
String input = "foo bar baz";

Pattern p = Pattern.compile("[a-zA-Z]+");
Matcher m = p.matcher(input);

List<String> results = new ArrayList<String>();

while (m.find()) {
    results.add(m.group());
}

// nun sind in results die drei String "foo", "bar" und "baz"
 
Genau. Nur das es halt in meinem Fall halt die gefundenen Wörter aus einem riesigen Text sein sollen.
Und dass diese halt in eine normale Textdatei geschrieben werden sollen
 

Zurück
Oben