String parsen

Prinz92

Mitglied
Hallo zusammen,

mithilfe einer Java-Anwendung möchte ich den Code von JS-Files einlesen und anschließend immer einen bestimmten Teil, nämlich den, der zwischen eckigen Klammern steht ([ ]) ausgeben.

Hierzu habe ich bereits folgendes programmiert:

Java:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

public class FileReader {

	private File file;
	private BufferedReader br;

	public FileReader(String pathname) {
		file = new File(pathname);
	}
	
	public String fileGetContent() {
		String buffer = "";
		String line = "";
		try {
			br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));

			while ((line = br.readLine()) != null) {
				if(line.contains("[")) {
					///rest of the line
				
				int ind_anfang = line.indexOf("[");
				String Rest = line.substring(ind_anfang);
				
				while ((line = br.readLine()) !=null) {
					if(line.contains("]")) {
						
						int ind_ende = line.indexOf("]");
						String Rest1 = line.substring(ind_ende);							
					}
				}
			}
			br.close();
			}
		}
			catch (Exception e) {

			System.out.println("Fehler!");
		}
		return buffer;
			}
		}

Nun weiß ich aber nicht mehr wirklich weiter und bitte deshalb um eure Hilfe.
Vielen Dank bereits im voraus!
 
hallo, ich möchte eine komplizierte mathematische Formel berechnen, die ich euch aber nicht verrate,
der Anfang ist noch leicht, paar mal Plus und Minus:
Java:
int x = 4;

int y = x + x - x;

bitte vervollständigt nun mein Programm, ohne dass ich irgendwas weiter dazu mitteilen muss
 
Hallo Prinz92,

du kannst einen einfachen Substring machen, die Stellen der Klammern hast du ja schon ausgelesen.

Java:
String deinstring = line.substring(ind_anfang, ind_ende); //Alles was zwischen den Klammern steht

Mit
Java:
if(line.contains("[")) {
solltest du vorsichtig sein, da das sehr fehleranfällig sein kann (Ließt dann alle Zeilen ein, welche eine Klammer beinhalten und es wird zum Compilerfehler kommen, da kein Substring generiert werden kann)
 
also SlaterB:
Java:
int x = 4;
 
int y = x + x - x;
System.out.print(y);
So?

@TE
warum ein neues readline nachdem du den anfang der zu lesenden stelle in der aktuellen zeile gefunden hast?

split doch einfach
 
in dem Entwurf seh ich erstmal mehrere Probleme:

1. class FileReader wird bereits von von Java mitgeliefert, also würde ich um Namenkonflikte zu vermeiden das ganze anders nennen
2. Die Methode fileGetContent liest die Datei und parsed zugleich. Die beiden Aufgaben sollte man trennen und in zwei Methoden verteilen. Ich halte es für besser erst alles auszulesen, in einer Variablen zu speichern und anschließen zu parsen.
3. Das dein Code nicht funktionieren kann liegt daran, dass er momentan immer den leeren buffer String zurückgibt. Du musst buffer schon Wert zuweisen 🙂

probier mal das, auch wenn es kein "guter" code ist:

Java:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class FileReader {
 
    private File file;
    private BufferedReader br;
 
    public FileReader(String pathname) {
        file = new File(pathname);
    }
    
    public String fileGetContent() {
        String buffer = "";
        String line = "";
        try {
            br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
 
            while ((line = br.readLine()) != null) {
                if(line.contains("[")) {
                    ///rest of the line
                
                int ind_anfang = line.indexOf("[");
                String buffer = line.substring(ind_anfang);
                
                while ((line = br.readLine()) !=null) {
                    if(line.contains("]")) {
                        
                        int ind_ende = line.indexOf("]");
                        String buffer = buffer + line.substring(0, ind_ende); 
                        boolean spassVorbei = true;
                        break;                           
                    } else {
                         buffer = buffer + line;
                    }
                }
                if(spassVorbei) { break; }
            }
            br.close();
            }
        }
            catch (Exception e) {
 
            System.out.println("Fehler!");
        }
        return buffer;
            }
        }
 
Schau dir mal reguläre Ausdrücke und Gruppen an, dann kann man das in einer einfachen Anweisung nutzen:

Java:
Matcher matcher = Pattern.compile( "\\[(.*)\\]", Pattern.MULTILINE | Pattern.DOTALL ).matcher( "Lala\n[\noh\nddaswillich\n]\nnicht" );
matcher.find();
System.out.println( matcher.group(1)  );
 

Neue Themen


Zurück
Oben