2 Floats aus einem String separieren

dastool

Erfahrenes Mitglied
Servus,

ich brauch mal wieder eure Hilfe, aber ich denk mal es reicht ein "Denkansatz".

Was ich vorhab:
Ich möchte aus einer Datei, die mit verschiedenen Wörtern und Zahlen gefüllt ist, auslesen.
Ist ja kein problem.
Nun möchte ich die 2 Floats haben.
Wieviele Zeichen pro Zeile gespeichert sind, ist unbekannt.
Wieviele Ziffern die Floats haben ist auch unbekannt.

Ich möchte grade diese 2 Floats separieren, damit ich einen "Baum" erstellen kann, der der grösse nach die Strings dann sortiert.

Einen Code für so einen Baum hat unser Dozent uns gestellt, genannt BinTree.
Diesen auf meine bedürfnisse anzupassen ist kein Problem, da wir ihn als Integern und String-Variante haben.

Was mir aber Kopfzerbrechen bereitet sind diese Floats rauszuholen und die Strings so "markieren" damit ich den Baum erstellen kann.

Wenn ihr den Code von dem Baum haben wollt, sagt bescheid, ansonsten lass ichs lieber... der is so aufgebläht :-)
 
Hallo Martin,

hab nicht so ganz verstanden was du vorhast aber soviel fällt mir jetzt spontan ein:

"Wieviele Zeichen pro Zeile gespeichert sind, ist unbekannt."

=> mit readLine() eine Zeile auslesen und dann mit length die Länge der Zeile und damit die Anzahl der Zeichen bestimmen

"Wieviele Ziffern die Floats haben ist auch unbekannt."

=> den Text einlesen und in einen String speichern. Den String kannst du jetzt mit split() aufteilen in Wörter und Ziffern und in einem Array abspeichern. Nun durchläufst du das Array mit einer for-Schleife und bestimmst für jedes Element mit length die Länge des Strings und damit die Anzahl der Zeichen. Ob das jeweilige Element nun ein Wort oder eine Zahl ist könntest du mit isDigit() herausfinden, dann weißt du auch ob es sich für diesen oder jenen um Buchstaben oder Ziffern handelt.


Vg Erdal
 
Nun hab ichs geschafft, das ich mich selber verwirre :-)

Code:
public String listeLesen()
    throws FileNotFoundException, IOException {
        BufferedReader in = new BufferedReader(new FileReader("liste"));
        String line = "";
        int i,j;
        line = in.readLine();
        StringTokenizer stLine = new StringTokenizer(line);
        j = stLine.countTokens();
        for(i = 0;i <= j; i++)
        {
            line.split(" ");
            String[] linesListe = new String[]{};
           
        }
        return line;
Soweit bin ich bisher...
Ich hab nur noch nicht verstanden, warum ich das nun in eine for-Schleife packe, und wie ich nun da die Zahlen auslese. isDigit ist doch eine Methode der Klasse Character. Dazu müsst ich doch nun den String zeichen für zeichen auseinandernehmen, oder?

Ohmann... die Grippe schwindet, aber das verwirrt sein bleibt... :-)

// edit:
Ich denk mal ich hab das nun soweit.

Code:
public float listeLesen()
    throws FileNotFoundException, IOException {
        BufferedReader in = new BufferedReader(new FileReader("liste"));
        String line = "",temp, subMenge,subEP;
        int i,j;
        float f=0,menge,ep;
        line = in.readLine();
        while(line != null)
        {
            temp = line;
            j = temp.length();
            
            for(i = 0; i < j+1; i++)
            {
                int pos,x,y;
                pos = temp.indexOf(" ");
                x = pos;
                y = temp.indexOf(" ", pos+1);
                subMenge = temp.substring(x, y);
                
                pos = temp.indexOf(" ", pos+1);
                x=pos;
                y = temp.indexOf(" ", pos+1);
                subEP = temp.substring(x,y);
                
                menge = Float.parseFloat(subMenge);
                ep = Float.parseFloat(subEP);
                
                f = ep/menge;
                return f;
            }
            line = in.readLine();
        }
        in.close();
        return f;
    }
 
Zuletzt bearbeitet:
Hallo Martin,

das hatte ich heut mittag kurz vor deiner Änderung geschrieben. Hab deine neue Version nicht weiter angeschaut. Es gibt hier natürlich viele Wege wie man dein Vorhaben realisieren könnte. Das soll jetzt einfach nur ein Ansatz sein.

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

import javax.swing.JTextArea;

public class NumbersandWords {

	public static boolean isFloat(String num) {
		try {
			Float.parseFloat(num);
		} catch (Exception e) {
			return false;
		}
		return true;
	}

	public static void main(String[] args) {
		JTextArea readtext = new JTextArea();
		String text = "";
		int zeilenanzahl = 0;
		try {
			BufferedReader in = new BufferedReader(new FileReader("Hallo.txt"));
			readtext.read(in, null);
			text = readtext.getText();
			in.close();
		} catch (IOException e) {
		}

		if (!text.equals(null))
			zeilenanzahl = 1;

		for (int i = 0; i < text.length(); i++)
			if (text.charAt(i) == '\n')
				zeilenanzahl++;

		 System.out.println(zeilenanzahl);
		 
		 System.out.println();

		String[] zeilen = text.split("\n");

		String[] wörterundzahlen = text.split(" |\n");

		for (int i = 0; i < wörterundzahlen.length; i++) {
			System.out.println(wörterundzahlen[i] + ":"
					+ wörterundzahlen[i].length() + ":"
					+ isFloat(wörterundzahlen[i]));
		}
	}
}

Vg Erdal
 
Ich könnt meinen Dozenten killen... anfangs war das mit ner Datenbank gedacht (is acuh weiterhin in planung) aber er wollts so *narf*
Ok, dank dir :)
Nun muss ich nurnoch die Floats aus der For-Schleife klauen und weiterverarbeiten :)
 
Zurück