Stringsuche

Kenbu

Grünschnabel
Hallo!

Ich habe folgendes Problem:

Ich habe mir ein GUI gemacht mit dessen Hilfe ich eine TXT Datei einlese und diese dann nach Strings durchforste.
---

unwichtiger text

name {
text
text
text
}

unwichtiger text

name {
text
text
text
}

wieder unwichtiger text

---
Ich möchte, dass er mir den Text, der sich in den geschwungenen Schleifen befindet, in der Konsole/JTextArea ausgibt. Er soll aber die ganze Datei nach "name" und den geschwungenen Klammern suchen und den Text der sich immer dazwischen befindet zu dem anderen Text dazukleben.
Also will ich dann am Schluss so eine Ausgabe haben:

text
text
text
text
text
text

Kann mir jemand bitte helfen? Ein Bsp-Code wäre wunderbar!

Grüße,
Kenbu
 
Sofern die Datei aus der du liest tatsächlich immer das von dir vorgestellte Format hat ist dies sehr einfach umzusetzen.

Java:
public static void main(String[] args) {
		final String LINE_SEPARATOR = System.getProperty("line.separator");
		try {
			BufferedReader r = new BufferedReader(new FileReader("test.txt"));
			String line = null;
			boolean capture = false;
			StringBuilder b = new StringBuilder( );
			while ((line = r.readLine( )) != null) {
				if (capture && line.contains("}")) {
					capture = false;
				}
				if (capture) {
					//Hier dann in die Textarea schreiben statt den
					//StringBuilder zu benutzen
					b.append(line).append(LINE_SEPARATOR);
				}
				if (line.contains("name") && line.contains("{")) {
					capture = true;
				}

			}
			System.out.println(b.toString( ));
		}
		catch (FileNotFoundException e) {
			e.printStackTrace( );
		}
		catch (IOException e) {
			e.printStackTrace( );
		}
	}
 
Hallo,

hier mal ein Vorschlag:
Java:
package de.tutorials.reima.examples;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Stringsuche {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new FileReader("test.txt"));
		StringBuilder result = new StringBuilder();		
		String line;
		boolean append = false;
		
		while ((line = br.readLine()) != null) {
			if (append) {
				if (line.trim().equals("}")) append = false;
				else {
					result.append(line);
					result.append('\n');
				}
			} else {
				if (line.trim().equals("name {")) append = true;
			}
		}
		
		System.out.println(result.toString());
	}

}

Grüße,
Matthias

<edit>Schade, zu langsam... die Ähnlichkeit ist aber verblüffend ;)</edit>
 
ähm... ich fürchte mein Problem ist noch nicht ganz....gelöst...

eure vorschläge funktionieren hervorragend, nur was ich eigentlich damit wollte, hat es leider nicht gelöst...(ich dachte ich könnte das alleine schaffen, wenn das hier einmal geht...' )

also, in wirklichkeit stand zwischen diesen geschwungenen klammern folgendes:

(abstand)"(abstand)text(abstand)"
(abstand)"(abstand)text(abstand)"
(abstand)"(abstand)text(abstand)"
(abstand)"(abstand)text(abstand)"

nachdem er mir das erfolgreich so gefiltert hat, wollte ich das dann so konvertieren:

(abstand)text(abstand)
(abstand)text(abstand)
(abstand)text(abstand)
(abstand)text(abstand)

Ich habe mir den Befehl dafür schon selber zusammengereimt, nur will er das nicht so hinnehmen wie ich's vorschlage.
Irgendwelche Ideen die mir helfen könnten? Plz?

nehmen wir zb den code von Matthias:

Code:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException; 
public class Stringsuche {     
	public static void main(String[] args) throws IOException {        
		BufferedReader br = new BufferedReader(new FileReader("test.txt"));        
		StringBuilder result = new StringBuilder();          
		String line;        
		boolean append = false;                
		while ((line = br.readLine()) != null) {            
			if (append) {                
				if (line.trim().equals("}")) append = false;                
				else {                    
					result.append(line);                    
					result.append('\n');                
					}            
				} else {                
					if (line.trim().equals("name {")) {						
						append = true;            	
					}					
				}	
//			line.substring(line.indexOf("\"")+1, line.lastIndexOf("\"")).trim();
			}	
		System.out.println(result.toString());
		} 
	}

Grüße,
Kenbu
 
Och ein wenig umgestellt geht das sehr gut.

Du hast einfach nicht beachtet dass substring nicht den aktuellen String verändert, sondern nur eine neuen geänderten String zurückgibt. Man muss bei substring also die Rückgabe verarbeiten.

Java:
public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new FileReader("test.txt"));
		StringBuilder result = new StringBuilder( );
		String line;
		boolean append = false;
		while ((line = br.readLine( )) != null) {
			if (append) {
				if (line.trim( ).equals("}")) {
					append = false;
				}
				else {
					line = line.substring(line.indexOf("\"") + 1,
							line.lastIndexOf("\"")).trim( );
					result.append(line);
					result.append('\n');
				}
			}
			else {
				if (line.trim( ).equals("name {")) {
					append = true;
				}
			}

		}
		System.out.println(result.toString( ));
	}
 
hm... :-( ich hab mir jetzt unbedingt einbilden müssen, dass mein prog auch in unicode kodierte files einlesen kann...
wie sollte ich den vorhandenen code am besten umschreiben, damit er mir das file einliest, diese stringsuche durchführt und dann fehlerfrei das ergebnis in eine andere txt-datei (die ebenfalls in unicode sein soll) hineinschreibt?

Hat jemand ne idee?
lg
 
Moin!
Zum einlesen (Beispiel utf-8):
Code:
BufferedReader in = new BufferedReader( new InputStreamReader(new
 FileInputStream("dateiname"), "UTF8"));
Zum schreiben:
Code:
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
            new FileOutputStream("dateiname"), "UTF8"));
*grüssle*
MeinerEiner
 
Zurück