Rechnen nach dem Einlesen

toni2569

Grünschnabel
Hallo liebe Community,

ich bin neu hier und hoffe im richtigen Thread gelandet zusein. Ich möchte gern etwas Rechnen und zwar folgendes...

Problem:
Ich lese einen String-Wert ein über knoll.setKpreis(st.nextToken()); (Bsp.: 10,12) und möchte diesen dann berechnen.

Erdachte Vorgehensweise:
Um dies zu bewerkstelligen muss ich erstmal das Komma gegen einen Punkt ersetzen (kpreis.replaceAll(",", ".")"); und das ganze dann von einem String in einen double Wert umwandeln:

Code:
// String aus Kpreis an String k übergeben
String k = knoll.getKpreis();

// Verwandeln des String in double und ersetzen des Kommas durch einen Punkt
double x = Double.valueOf(k.replaceAll(",",".");

Nun damit rechnen und fertig - so war der Gedanke! In einer TestUI geht das auch alles wunderbar.

TestUI: - hier geht alles!

Code:
String ab = "45,45"; 					        //String mit deutscher Kommazahl
double x = Double.valueOf(ab.replaceAll(",", ".")); 	// Verwandlung des String in double und 
double w = x * 2 ;					                ersetzen des Kommas durch einen Punkt
String d = String.valueOf(w);				        // Zurückwandeln für Ausgabe
knoll.setY(d);						                // In Y übergeben


Vielleicht kann man mir jemand auf die Sprünge helfen und mir sagen wo ich aufgehört habe zu denken :(, sozusagen in meinem Kopf den grauen Zellen einen Stoß verpassen.

Vielen Dank im voraus für jegliche Hilfe! Frohe Weihnachten!

Herzliche Grüße!




Hier der gekürzte Quellcode, vielleicht kann mir jemand einen Denkanstoß geben.

Datei 1 : CSV

Code:
import java.io.*;
import java.net.*;
import java.util.*;
 
public class CSV{
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        
    	// Einlesen des Files und spliten
        BufferedReader buff = null;
        ArrayList<Knoll> lines = new ArrayList<Knoll>();
 
        try {
            
        	// File Einlesen und teilen
  		  	URL myURL = new URL("http://www.meinedomain.net/csv/import.csv");
  		  	BufferedReader URLinput = new BufferedReader(new InputStreamReader(myURL.openStream()));
  		  	buff = new BufferedReader(URLinput); // ggf. myFile
            String line;
            while ((line = buff.readLine()) != null) {
                
                
                Knoll knoll = new Knoll();
                StringTokenizer st = new StringTokenizer(line, ";");
                
                knoll.setBez1(st.nextToken());					// Spalte 1 wird geladen und übergeben
                knoll.setKpreis(st.nextToken());				// Spalte 2 wird geladen und übergeben
                knoll.setUvp(st.nextToken());					// Spalte 3 wird geladen und übergeben
                knoll.setArtnr(st.nextToken());					// Spalte 4 wird geladen und übergeben
                knoll.setEan(st.nextToken());					// Spalte 5 wird geladen und übergeben
                knoll.setBest(st.nextToken());					// Spalte 6 wird geladen und übergeben
                knoll.setVorschlagversandweg(st.nextToken());	// Spalte 7 wird geladen und übergeben
                knoll.setMarke(st.nextToken());					// Spalte 8 wird geladen und übergeben
                
            	String k = knoll.getKpreis();
            	double x = Double.valueOf(k.replaceAll(",", "."));
            	
                //das geht komischerweise
                // String ab = "45,45"; 
            	// double x = Double.valueOf(ab.replaceAll(",", "."));

        	double w = x * 2 ;
        	String d = String.valueOf(w);
        	knoll.setY(d);
                
                lines.add(knoll);		// Fügt die Daten zur ArrayList hinzu
                
            }

restlicher Quellcode....


Datei 2 : knoll

Code:
public class Knoll implements Comparable<Knoll>{
    
    // Variabelen werden Deklariert
    private String bez1;
    private String kpreis;
    private String uvp;
    private String artnr;
    private String ean;
    private String best;
    private String vorschlagversandweg;
    private String marke;
    
    double x ;
    double w ;
    String y ;
    
    public Knoll(){
    }
    
    // Methoden
    public String getBez1() {
        return bez1;
    }
 
    public void setBez1(String bez1) {
        this.bez1 = bez1;
    }
 
    public String getKpreis() {
    	return kpreis;
    }
 
    public void setKpreis(String kpreis) {
    		this.kpreis = kpreis;
    }    
    
    public String getUvp() {
        return uvp;
    }
 
    public void setUvp(String uvp) {
        this.uvp = uvp;
    }   
    
    public String getArtnr() {
        return artnr;
    }
 
    public void setArtnr(String artnr) {
        this.artnr = artnr.replaceAll(" ","");
    }   

    public String getEan() {
        return ean;
    }
 
    public void setEan(String ean) {
        this.ean = ean;
    } 
    
    public String getBest() {
    	return best;
    }
 
    public void setBest(String best) {
    		this.best = best;

    } 

    public String getVorschlagversandweg() {
        return vorschlagversandweg;
    }
 
    public void setVorschlagversandweg(String vorschlagversandweg) {
        this.vorschlagversandweg = vorschlagversandweg;
    }

    public String getMarke() {
    	return marke;
    }
 
    public void setMarke(String marke) {
        this.marke = marke.replaceAll(" ","");
    }
        
	public double getX() {
		return x;
	}

	public void setX(double x) {
		this.x = x;
	}

	public String getY() {
		return y;
	}

	public void setY(String y) {
		this.y = y;
	}
    
	// Compare Sortiermethode
    public int compareTo(Knoll o) {
        return best.compareTo(o.getBest());    
    }
    
    // Reihenfolge der Ausgabe
    public String toString(){
        return 

// Neue Spalte wird eingefügt
        "BLABLA" + "\t" +

// trim() entfernt alle umliegenden Leerzeichen
        artnr.trim() + "\t" + 	

// Marke und Bezeichnung
        marke +" "+ bez1 + "\t" +

// Bestand wird hinzugefügt
        best.trim() + "\t" + 

// Vorschlag Versandweg
        vorschlagversandweg.trim() + "\t" +

// Unverbindliche Preisempfehlung
        uvp.trim() + "\t" + 

// Neuer Artikelpreis
        y + "\t" + 	

// Marke
        marke.trim() +"\t" +	

// Artikelpreis laut CSV
        kpreis +"\t" +

// Ean des Artikels
        ean.trim() + "\t" ; 
    }
    
}
 
Meine Kristallkugel raet das du
Java:
                String k = knoll.getKpreis();
                double x = Double.valueOf(k.replaceAll(",", "."));
meinst, was nicht geht?
Hast du dir mal k ausgeben lassen?
Und was genau geht denn nicht?
 
Hallo!

Vielen Dank für die Antwort deiner Kristallkugel, sie hat recht. Hier mal die Fehlermeldung, ich habe mich sicherlich etwas verwirrend ausgedrückt.

Der Wert, der in kPreis eingelesen wird ist ein String im Format "10,45". Folgender Fehler ergibt sich beim einlesen:

Code:
Exception in thread "main" java.lang.NumberFormatException: For input string: "KPreis"
	at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
	at java.lang.Double.valueOf(Double.java:475)
	at CSV.main(CSV.java:49)

Zu deiner Frage:

Die Variable k wird mir ausgegeben, scheinbar gibt es ein Problem sobald ich von meinem String in den double Wert möchte und anders herum. Warum ist das so? In der TestUI geht das doch auch alles, nur warum hier nicht?

Herzliche Grüße!
 
Zuletzt bearbeitet:
Hast du es dir mal mit nem System.out ausgeben lassen ( knoll.getKpreis() )?
Und diesen Wert auch mal extra
Java:
k.replaceAll(",", ".")
ausgeben lassen?
 
Hallo!

@ MiMi
Es gibt einen Fehler sobald ich von meinem String in den double möchte. -> siehe Akeshihiro

@ Akeshihiro
Ja Klar, ich bin ja auch selten dämlich! Der liest aus der Datei natürlich die erste Zeile mit ein, in der kein String steht der zu einem double umgewandelt werden kann, denn das ist die Spalten Beschreibung. Folglich muss dieser Fehler kommen, da habe ich mit keiner Silbe dran gedacht! Einfach die oberste Zeile weg hauen und dann rechnen...

VIELEN DANK

Frohe Weihnachten!

Herzlichste Grüße!
 
Deswegen solltest du dir knoll.getKpreis() ausgeben lassen, dann findet man solche fehler.
->
"Hast du es dir mal mit nem System.out ausgeben lassen ( knoll.getKpreis() )? "
 
Ich habe das quasi parallel gemacht ;) Die Glühlampe ging sozusagen zweimal an und erleuchtete die Kugel. Großes DANKE****** So kann ich beruhigt über Weihnachten etwas rumbasteln.
 
Zurück