Input/Output Stringverarbeitung

john1111

Mitglied
Moin Zusammen.

Folgendes Problem.
Ich habe einen String, welcher immer unterschiedlich lang ist.
Dieser kann zB. so aussehen:

Code:
10053,NAME3 ,NAME4,1,4,0,2,28,1,16,,30000,100,10054,828,0,5,1,82,0,7,7,17,10,15,9,0,0,110,130,45,97,80,-1,-1,-1,-1,-1,-1,0,3,-1

Nun möchte ich im Prinzip vor jedem Komma und nach jedem Komma ein ' Zeichen.
Zusätzlich am Anfang des Strings und am Ende des Strings.
Wichtig: An einer Stellte gibt es zwei Kommas, ist so gewollt.

Sprich:
Code:
'10053','NAME3' ,'NAME4','1','4','0','2','28',1,16','','30000','100','........','-1',0','3','-1'

Kann mir da jemand weiter helfen?
Kann zwar etwas Java aber bis ich das in meinem Kopf zurecht gerückte habe ist Weihnachten..

Hab mir das so vorgestellt.
Ich interiere durch die Arraylist, nehm ich mal an, überall wo ein , ist les ich den Index und mach index-1 ein ' und index+1 ein '.

Würde ja so ca. gehen oder?
Wär klassen wenn mir jemand helfen könnte!

Gruß
John1111
 

krgewb

Top Contributor
So könnte es aussehen. Du musst noch machen, dass ganz am Ende kein Komma sein soll.

Java:
public class Hauptprogramm {

    public Hauptprogramm() {

        String ganzerString = "10053,NAME3 ,NAME4,1,4,0,2,28,1,16,,30000,100,10054,828,0,5,1,82,0,7,7,17,10,15,9,0,0,110,130,45,97,80,-1,-1,-1,-1,-1,-1,0,3,-1";

        String[] einzelneTeile = ganzerString.split(",");

        String neuerString = "";

        for (int i = 0; i < einzelneTeile.length; i++) {
            neuerString += "'" + einzelneTeile[i] + "',";
        }

        System.out.println(neuerString);

    }

    public static void main(String[] args) {
        new Hauptprogramm();
    }
}


Ausgabe:
Code:
'10053','NAME3','NAME4','1','4','0','2','28','1','16','','30000','100','10054','828','0','5','1','82','0','7','7','17','10','15','9','0','0','110','130','45','97','80','-1','-1','-1','-1','-1','-1','0','3','-1',
 

Joose

Top Contributor
So aus dem Kopf heraus:
Java:
String s = // dein input
s = s.replaceAll(",", "','");
s = "'" + s + "'";
 

looparda

Top Contributor
Alternativ:
Java:
public String modify(String in) {
    return Pattern.compile(",").splitAsStream(in) // am , zerhacken
                  .map(String::trim) // Leerzeichen entfernen
                  .map(s -> "'" + s + "'") // quoten
                  .collect(Collectors.joining(",")); // wieder mit , getrennt zusammenführen
    }
}
Möchtest du trotzdem deinen Ansatz mit der ArrayList als Übung weiterführen (bietet sich nicht an, aber wäre vermutlich auch möglich) oder reicht dir das Ergebnis mit Hilfe der hier zur Verfügung gestellten Codes?
 

looparda

Top Contributor
Ist das ein Lambda?

Ja ist es. Mit kleiner Erklärung: splitAsStream liefert einen Stream<String>, auf dem u.A. die Methoden map, collect anwendbar sind. Parameter dieser Methoden nehmen Interfaces entgegen, wobei diese in besonderer Form "Functional Interfaces" sind (Functional Interfaces <=> Interfaces mit nur einer Methode, neben ggf. mehreren default Methoden. Zusätzlich annotiert mit @FunctionalInterface). Mit Hilfe des Lambda-Ausdrucks lassen sich diese Functional Interfaces elegant implementieren. Bspw.:
Java:
s -> "'" + s + "'"
implementiert die apply-Methode einer
Function<Rein, Raus>, in dem Fall: Function<String, String>
Java:
String apply(String t);

Also hab das mit dem , jz hinten hinbekommen.
Jetzt eine ganze Liste einzulesen ist komplizierter oder?
Also mehrerer solcher Zeilen.
Nein. Wenn du Lösung von krgewb übernommen und verstanden hast (die schon eine Schleife beinhaltet) kannst du das ganz einfach auf mehrere Zeilen transferieren.
 

Neue Themen


Oben