# String für double Parsen



## Kirby.exe (6. Dez 2019)

Also folgende Aufgabenstellung:

Die Methode bekommt einen String übergeben, dieser enthält Brüche welche durch ein Semikolon getrennt sind, die Methode soll diese Splitten und in ein double Array packen. Ich hatte mir das wie folgt überlegt, jedoch hat es in meinem Kopf wesentlich besser funktioniert xD


```
public static double [] parseToDouble(String s) {
        String temp = " ";
        double temp1 = 0;
        char stop = ';'; //Trenner-Variable
        int t = 0; //counter
        double [] result = new double[s.length()];
        for(int i = 0; i < s.length(); i++) {
            if(s.charAt(i) == stop) {
                result [t] = Double.parseDouble(temp); //der String for ; in double casten und ins Array at t
                t++;
            }
            temp += s.charAt(i);
        }
        result = Arrays.copyOf(result, t);
        return result;
    }
```


----------



## kneitzel (6. Dez 2019)

Kannst Du das noch etwas besser umschreiben? Im Augenblick kann ich mir das noch nicht so richtig vorstellen.

Was mir so bezüglich Deiner Thematik so einfällt;
a) Wenn Du einen String hast, der Zahlen durch ";" getrennt enthält, dann kannst Du String.split nutzen um den eien String in ein Array von Strings zu teilen.
b) Wenn Du selbst die Strings zusammen bauen willst: Das Leerzeichen dürfte zu einer NumberFormatException führen. Daher würde ich zum einen temp nicht mit einem Leerzeichen initialisieren sondern mit dem leeren String. Und falls in dem gegebenen String auch Leerzeichen enthalten sind, dann ist ggf. auch ein trim() Aufruf sinnvoll.
c) Nach dem parsen von temp sollte temp natürlich aich zurück gesetzt werden. Der Wert ist ja geparst und damit abgearbeitet.
d) Du führst keinen Cast aus sondern du parst den String. Dies sind zwei unterschiedliche Dinge. Bei einem Cast bleibt das Objekt selbst unverändert - es wird nur anders gesehen. Beim parsen wird ein String analysiert und etwas neues erstellt.

Also b) und c) wären dann in etwa sowas:

```
public static double [] parseToDouble(String s) {
        String temp = "";
        double temp1 = 0;
        char stop = ';'; //Trenner-Variable
        int t = 0; //counter
        double [] result = new double[s.length()];
        for(int i = 0; i < s.length(); i++) {
            if(s.charAt(i) == stop) {
                result [t] = Double.parseDouble(temp.trim());
                temp="";
                t++;
            }
            temp += s.charAt(i);
        }
        return Arrays.copyOf(result, t);
    }
```

Mit a) wäre das dann ggf. sowas:

```
public static double [] parseToDouble(String s) {
        String[] parts = s.split(";");
        double [] result = new double[s.length()];
        for(String part: parts) {
            result [t] = Double.parseDouble(part);
            t++;
        }
        result = Arrays.copyOf(result, t);
        return result;
    }
```


----------



## Kirby.exe (6. Dez 2019)

JustNobody hat gesagt.:


> for(String part: parts) {


Könntest du mir erklären was dies macht? also ich schätze mal eine verbesserte For Schleife, aber was genau?


----------



## Kirby.exe (6. Dez 2019)

Warum bekomme ich bei dieser Eingabe eine Fehler Meldung?


```
String testing = "1/-2;5/4;342/100;0/1";
```

Liegt es weil sie als Brüche übergeben werden?

Das ist die Fehlermeldung: 


```
Exception in thread "main" java.lang.NumberFormatException: For input string: "1/-2"
    at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054)
    at java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
    at java.base/java.lang.Double.parseDouble(Double.java:549)
    at Parser.parseToDouble(Parser.java:18)
    at Parser.main(Parser.java:10)
```


----------



## kneitzel (6. Dez 2019)

Das war eine sogenannte for each Schleife. Wenn Du die noch nicht gehabt hast, dann ignoriere das einfach und wir machen ein:

```
for(int index=0; index < parts.length; index++) {
            result [t] = Double.parseDouble(parts[i]);
            t++;
        }
```

Ansonsten als Erläuterung:

```
for(String part: parts) {
}
```
ist unter dem Strich das Gleiche wie:

```
for(int index=0; index < parts.length; index++) {
  String part = parts[index];
}
```


Und ja - er kann jetzt nur double Werte auswerten und das sind keine Double Werte.

Was Du da machen musst, ist evtl. ein weiterer Split mit dem "/" um dann die zwei Teile des Bruches auszuwerten.


----------



## Kirby.exe (6. Dez 2019)

Naja also im Grunde soll der Bruch in eine Dezimal Zahl gewandelt werden also 1/-2 in -0.5


----------

