Zahlenformate...Tausendertrennzeichen

Exilsofa

Neues Mitglied
Hallo
Vorweg, ich bin ,was Java betrifft, leider noch ein Anfänger.
Ich habe hier ein Programm, was Meßwerte sammelt und auswertet. Unteranderem soll es eine csv Datei auslesen. Klappt soweit auch, nur das ich ein Fehler bekommme, wenn gewisse Werte höher sind als 1000. In der CSV steht 1 000,123.
Wie kann ich dieses Leerzeichen entfernen.

Mein Code sie folgendermaßen aus

Java:
import java.io.BufferedReader;


import java.io.FileReader;


import java.util.ArrayList;


import java.util.List;


import java.util.logging.Level;


import java.util.logging.Logger;




public class DensoImporter {


    private List<String> data;


    private String logger;



    public DensoImporter(String logger) {


        this.logger = logger;


        data = new ArrayList<String>();


    }



    /**


     * Import DensoData File


     *


     * @param filename  Dateiname


     * @param densoData DensoData


     * @return true bei Erfolg, ansonsten false


     */


    public boolean importDenso(String filename, DensoData densoData) {


        int index;


        Double position;


        Double value;



        // Densodaten leeren


        densoData.clear();



        // File laden


        if (!loadFile(filename))


            return false;



        // Daten lesen


        densoData.setDickeDAX(getDouble(4, 1));


        densoData.setDicke(getDouble(4, 1));


       densoData.setMaxDichteLinks(getDouble(1, 5));


        densoData.setMaxDichteRechts(getDouble(1, 6));


        densoData.setMaxDichtePositionLinks(getDouble(1, 8));


        densoData.setMaxDichtePositionRechts(getDouble(1, 9));


        densoData.setAbstandMaxDichte(getDouble(1, 10));


        densoData.setDichte(getDouble(1, 11));


        densoData.setDichteMinMitte(getDouble(1, 12));




        index = 0;


        // Daten einlesen bis es einen Fehler gibt ( bis ans Ende des Files )


        for (; ; ) {


            // Daten holen


            position = getDouble(0, 19 + index);


            value = getDouble(1, 19 + index);


         //   value = Double.parseDouble(line[col].replace(",", "."));



            index++;


            // Bei einem Fehler die Schleife beenden


            if ((position == null) || (value == null)) {


                break;


            } else {


                // Daten übernehmen


                densoData.addWerte(position.doubleValue(), value.doubleValue());


            }


        }



        return true;


    }




    /**


     * File laden


     *


     * @param filename Dateiname


     * @return true bei Erfolg, ansonsten false


     */


    private boolean loadFile(String filename) {


        BufferedReader reader = null;


        String line;



        if(filename == null)


            return false;



        try {


            // Daten leeren


            data.clear();



            // Buffered Reader erzeugen


            reader = new BufferedReader(new FileReader(filename));



            // alle Zeilen einlesen


            while ((line = reader.readLine()) != null) {


                data.add(line);


            }



        } catch (Exception e) {


            // bei einem Fehler mit false beenden


            Logger.getLogger(logger).log(Level.WARNING, e.getMessage());


            return false;


        } finally {


            if (reader != null)


                try {


                    reader.close();


                } catch (Exception e) {


                    Logger.getLogger(logger).log(Level.WARNING, e.getMessage());


                }


        }



        return true;


    }



    /**


     * File checken und Dicke zurückgeben


     *


     * @param filename Dateiname


     * @return true bei Erfolg, ansonsten false


     */


    public Double checkFile(String filename) {


        BufferedReader reader = null;


        String line;



        try {


            // Daten leeren


            data.clear();



            // Buffered Reader erzeugen


            reader = new BufferedReader(new FileReader(filename));



            // Die ersten 5 Zeilen einlesen


            for (int i = 0; i < 5; i++) {


                if ((line = reader.readLine()) != null) {


                    data.add(line);


                }


            }



        } catch (Exception e) {


            // bei einem Fehler mit false beenden


            Logger.getLogger(logger).log(Level.WARNING, e.getMessage());


            return null;


        } finally {


            if (reader != null)


                try {


                    reader.close();


                } catch (Exception e) {


                    Logger.getLogger(logger).log(Level.WARNING, e.getMessage());


                }


        }



        return getDouble(4,1);


    }



    /**


     * Werte ermitteln


     *


     * @param col Spalte


     * @param row Zeile


     * @return bei Erfolg den Wert, ansonsten false


     */


    private Double getDouble(int col, int row) {


        String[] line;


        Double value;



        try {


            // Zeile vorhanden? wenn nicht mit false beenden


            if (row >= data.size())


                return null;



            // Zeile an Tabulatoren trennen


            line = data.get(row).split(";");



            // Spalte vorhanden? wenn nicht mit false beenden


            if (col >= line.length)


                return null;



            // Wert aus String erzeugen


            value = Double.parseDouble(line[col].replace(",", "."));



        } catch (NumberFormatException e) {


            // Bei Fehlern mit false beenden


            Logger.getLogger(logger).log(Level.WARNING, e.getMessage());


            return null;


        }



        // Wert zurückgeben


        return value;


    }




}
 

Dompteur

Top Contributor
Für deinen Fall sollte es reichen, wenn du in der Methode getDouble die Zeile
Java:
value = Double.parseDouble(line[col].replace(",", "."));
so erweiterst
Java:
value = Double.parseDouble(line[col].replace(",", ".").replace(" ", "") );

Hier wird also bisher schon jeder Beistrich durch einen Punkt ersetzt. Nun wird zusätzlich jedes Leerzeichen durch nichts ersetzt. D.h. das Leerzeichen wird entfernt.

Eine saubere Lösung wäre das Parsen unter Verwendung der Klasse DecimalFormat.
Dort kannst du das Muster, in dem die Zahlen vorliegen angeben. Auch kannst du da definieren, welche Zeichen als Tausendertrennzeichen und Dezimalpunkt benutzt werden.
 

Dompteur

Top Contributor
@Exilsofa : Wie ich schon geschrieben habe, musst du die Zeile 466 ändern.

@mrBrown : Deine Lösung passt nicht, da die deutschen Locale einen Punkt als Tausendertrennzeichen erwartet. Hier steht da aber ein Leerzeichen. Also entweder nach einem passenden Land suchen oder das Tausendertrennzeichen im DecimalFormat Objekt direkt auf den gewünschten Wert setzen.
 

mrBrown

Super-Moderator
Mitarbeiter
@mrBrown : Deine Lösung passt nicht, da die deutschen Locale einen Punkt als Tausendertrennzeichen erwartet. Hier steht da aber ein Leerzeichen. Also entweder nach einem passenden Land suchen oder das Tausendertrennzeichen im DecimalFormat Objekt direkt auf den gewünschten Wert setzen.
Stimmt, hab das Leerzeichen übersehen und nur auf das Komme geachtet :)

DecimalFormat mit passendem Pattern ist in dem Fall das sinnvollste.
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben