StringBuffer(Buchstabe) -> Double konvertieren

Status
Nicht offen für weitere Antworten.

Silver

Mitglied
Hallo,

ich möchte eine externe Datei einlesen und in einem double[][] speichern. Die Datei ist so folgendermaßen aufgebaut:

1 2 R 3.4
1 3 L 2.3

Das Problem: Die Buchstaben lassen sich in meiner bisherigen Lösung nicht einlesen (Double.parse Double Befehl):

Code:
public Einlesen (int zeilen, int spalten){
	//Einlesen der Daten aus der Datei "input.txt"	
		int i = 0;
		inputmatrix = new double [zeilen][spalten];
			
		
		try {
			FileReader fr = new FileReader ("input.txt");
			BufferedReader br = new BufferedReader (fr);	
			String line;	
			
			
			while ((line = br.readLine())!= null) {
				String[] items = line.split(" ");
				for (int j = 0; j < items.length; j++) {
					try {
						inputmatrix[i][j] = Double.parseDouble(items[j]);
					} 
					catch (NumberFormatException e) {
							System.out.println("Fehler beim Einlesen der Datei");
							System.exit(-1);
					}
				}
				if (++i == zeilen)
					break;	
			}
		}
		catch (IOException e){
			System.out.println ("Datei kann nicht geöffnet werden! " +e);
		}
}

Nun habe ich überlegt, den StringBuffer zunächst in einen String zu konvertiern, dann von einem String in Double.

Code:
...
while ((line = br.readLine())!= null) {
				String[] items = line.split(" ");
				for (int j = 0; j < items.length; j++) {
					try {
						StringBuffer sb = new StringBuffer(items[j]);
						items[j] = new String(sb);
						items[j] = sb.toString();
						System.out.println(sb);
						double d = Double.valueOf(items[j].trim()).doubleValue();
						System.out.println(d);
...

So klappt es aber leider auch nicht.
Ich habe danach mal testweise den String zunächst in einen Char gewandelt, und von Char dann nach Double.

Code:
String s = "R";
System.out.println(s);
char[] c = s.toCharArray();
char c = s.charAt(0);
System.out.println(c);
double d = Double.valueOf(s);
System.out.println(d);
char cc = (char)d;
System.out.println (cc);

Das klappt, aber so würde er mir bei den Zahlen alle Nachkommastellen wegnehmen.
Wäre toll, wenn mir einer helfen würde!

Liebe Grüße Silver
 
So wie das da aufgebaut ist, wird die NumberFormatException geworfen, sobald der Parser die Buchstaben erreicht hat.#
Lass die Buchstaben in der Datei doch einfach weg.
 
JPKI hat gesagt.:
So wie das da aufgebaut ist, wird die NumberFormatException geworfen, sobald der Parser die Buchstaben erreicht hat.#

Ja, genau das ist das Problem.

JPKI hat gesagt.:
Lass die Buchstaben in der Datei doch einfach weg.

Das möchte ich eigentlich nicht. Ist die Eingabedatei für einen Schaltungssimulator, und die Buchstaben sollen die Bauteile darstellen. Klar kann ich einfach drei Zahlenwerte nehmen und die intern als R, L und C hinterlegen, aber das ist momentan nur meine Notlösung.

Liebe Grüße Silver
 
Juchu, hab nun eine Lösung gefunden. Seht selbst, nicht schön, aber klappt 😀

Code:
import java.io.*;

public class Einlesen2 {
	public static void main (String[] args){
		int i = 0;
		int zeilen = 6;
		int spalten = 4;
		double[][]inputmatrix;
		inputmatrix = new double [zeilen][spalten];

		try {
			FileReader fr = new FileReader ("input.txt");
			BufferedReader br = new BufferedReader (fr);	
			String line;	
			
			
			while ((line = br.readLine())!= null) {
				String[] items = line.split(" ");
				for (int j = 0; j <= 1; j++){
					try {
						inputmatrix[i][j] = Double.parseDouble(items[j]);
					}	
					catch (NumberFormatException e) {
						System.out.println("Fehler beim Einlesen der Datei");
						System.exit(-1);
					}
				}
				for (int k = 2; k < 3; k++){	
					try {
						String s = items[k];
						char c = s.charAt(0);
						System.out.println(c);
						double d = Double.valueOf(c);
						System.out.println(d);
						inputmatrix[i][k] = d;
					}
					catch (NumberFormatException e) {
						System.out.println("Fehler beim Einlesen der Datei");
						System.exit(-1);
					}
				}
				for (int l = 3; l < items.length; l++) {	
					try {
						inputmatrix[i][l] = Double.parseDouble(items[l]);
					}	
					catch (NumberFormatException e) {
						System.out.println("Fehler beim Einlesen der Datei");
						System.exit(-1);
					}
				}
				if (++i == zeilen)
					break;	
			}
		}
			catch (IOException e){
			System.out.println ("Datei kann nicht geöffnet werden! " +e);
			}
			
		for (i = 0; i < inputmatrix.length; i++){
			for (int j = 0; j < inputmatrix [i].length; j++){
				System.out.print(i);
				System.out.print(j);
				System.out.print(": ");
				System.out.print((inputmatrix[i][j]));
				System.out.print("  ");
					}
				System.out.println ();
			}		
	}
}

Liebe Grüße Silver
 
Probier's mal so:
Code:
try {
         FileReader fr = new FileReader ("input.txt");
         BufferedReader br = new BufferedReader (fr);   
         String line;   
         
         
         while ((line = br.readLine())!= null) {
            String[] items = line.split(" ");
            for (int j = 0; j < items.length; j++) {
               try {

                  int k = j;

                  for (int l = 0; l < items[j].length; l++)
                   if (!Character.isDigit(items[j].charAt(l)) && !(items[j].charAt(l) == '.'))
                    k++;

                  inputmatrix[i][j] = Double.parseDouble(items[k]);
               }
               catch (NumberFormatException e) {
                     System.out.println("Fehler beim Einlesen der Datei");
                     System.exit(-1);
               }
            }
            if (++i == zeilen)
               break;   
         }
      }
      catch (IOException e){
         System.out.println ("Datei kann nicht geöffnet werden! " +e);
      }

Code ohne Garantie, is nur schnell hingesaut^^
 
Viele Dank JPKI! Nach kleinen Anpassungen passt's und ist viel eleganter als meine Lösung:

Code:
try {
	         FileReader fr = new FileReader ("input.txt");
	         BufferedReader br = new BufferedReader (fr);   
	         String line;   
	         
	         
	         while ((line = br.readLine())!= null) {
	            String[] items = line.split(" ");
	            for (int j = 0; j < items.length; j++) {
	               try {

	                  double k = j;
	                  String p = items[j];
	                  char c;
	                  
	                  for (int l = 0; l < items[j].length(); l++)
	                	if (!Character.isDigit(items[j].charAt(l))){
	                	   		c = p.charAt(0);
								k = Double.valueOf(c);
								inputmatrix[i][j] = k;
	                	}
						else	
								inputmatrix[i][j] = Double.parseDouble(items[j]);
	               }
	               catch (NumberFormatException e) {
	                     System.out.println("Fehler beim Einlesen der Datei");
	                     System.exit(-1);
	               }
	            }
	            if (++i == zeilen)
	               break;   
	         }
	      }
	      catch (IOException e){
	         System.out.println ("Datei kann nicht geöffnet werden! " +e);
	      }

Eine Frage hätte ich dann noch: Was bedeutet items[j].charAt(l) in der If Schleife genau?

Liebe Grüße Silver
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben