Java Werte aus einem String in Liste Speichern?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Splitte erst in zwei Teile (Trenner ist FROM) und anschließend vom zweiten Teil noch einmal anhand von Komma und Leerzeichen. Via Stream können leere Einträge herausgefiltert werden.

String[] result = Arrays.stream(s.split("FROM")[1].split("[\\s,]")).filter(e -> e.length() > 0).toArray(String[]::new);
daCypher  16.02.2022, 14:06

oder die Regexes so anpassen, dass gar keine leeren Einträge entstehen:

String[] result = s.split("(?i)from\\s*")[1].split("[\\s,]+");

(Das "(?i)" bedeutet nur case-insensitive, also dass das "FROM" groß oder klein oder gemischt geschrieben werden kann)

3
DZNRandom 
Fragesteller
 17.02.2022, 14:25
@daCypher

Danke! Wie würde das aussehen wenn ich alles zwischen Select und From ausgeben wöllte?

0
regex9  17.02.2022, 14:48
@DZNRandom

Wenn man das obige Snippet lediglich erweitert:

String[] result = s.split("(?i)from")[0].split("(?i)select\\s*")[1].split("[\\s,]+");

Andererseits könnte man den Substring zwischen SELECT und FROM auch direkt mit einem Matcher herausziehen.

Pattern regex = Pattern.compile("(?i)select\\s+(.+)\\s+from");
Matcher matcher = regex.matcher(s);

if (matcher.find()) {
  String columns = matcher.group(1);
  // split column list ...
}

Oder du suchst erst mit der indexOf-Methode nach dem Index, wann from beginnt und zerlegst den String dann mit Hilfe der substring-Methode.

2
//add to the end of the list
stringList.add(random);

//add to the beginning of the list
stringList.add(0,  random);

//replace the element at index 4 with random
stringList.set(4, random);

//remove the element at index 5
stringList.remove(5);

//remove all elements from the list
stringList.clear();

Noch irgendwas unklar? Listen lohnen sich allerdings nur bei einer stark eingeschränkten Größe. 100 Tupel sind in Ordnung, aber ab 1000 wird es dann echt langsam!

...........................

Dort kannst du nun entweder den gesamten String der Datenbankanfrage speichern, oder du zersplitterst den String bereits und nutzt eine Containervariante, wo du dann ein Array hinterlegen kannst.

also ich würde erstmal den String so kürzen das das Select ... FROM weg ist

den rest kann man dann mit Split und dem trennzeichen Komma aufteilen .

z.b.

public class Main {
   public static void main(String[] args) {
       String str = "select * FROM kunde,chef,laden ";
       String strlast = str.substring(15); // oder was vergleichbares was das FROM ende findet
       String[] words = strlast.split(",");
       for (String word : words) {
           System.out.println(word);
       }
   }
}

aber wenn es um SQL statements geht, dann würde ich die entsprechenden felder aus der antwort vom server holen .

DZNRandom 
Fragesteller
 16.02.2022, 14:45

Danke! Es geht in dem Falle darum die Wartbarkeit zu garantieren, dass andere Entwickler in der Config Datei alles simple einstellen können. :)

1