Java Split Leerzeichen in Anführungszeichen nicht beachten

Hallo,

denke mal, dass Java hier nicht reinpasst, wollte es aber trotzdem mal probieren.

Ich habe einen Input-Stream, der den Input an den Leerzeichen trennt und ihn in einem String-Array spiechert.

import java.util.Scanner; [...] try (Scanner scanner = new Scanner(new BufferedInputStream(System.in));) { while (scanner.hasNext()) { try { String line = scanner.nextLine(); String[] command = line.split(" "); [...]

Nun habe ich schon nach mehren RegEx-Möglichkeiten gesucht, dass Leerzeichen zwischen Anführungszeichen ignoriert werden, jedoch ohne Erfolg.

Bsp.:
Der Satz “Ich bin “Franz Bauer” undso” sollte so gespeichert werden:
command[0] = Ich
command[1] = bin
command[2] = Franz Bauer
command[3] = undso

Jedoch kenne ich mich mit RegEx zu wenig aus, daher wollte ich hier nach Hilfe fragen.

Gruß, DMan

Das ist nicht ganz so schwierig, wenn man Java-Strings und Regex kennt.

Ich sehe, du willst an " ", " “” oder “” " trennen?
Also kann man einen Regex bauen, der diese drei Dinge unterscheidet. Der simple Regex würde dann folgendermaßen aussehen (die beiden “/” markieren Anfang und Ende bei den meisten Sprachen mit prce):

Lt. dieser Webseite würde der entsprechende Regex dann für Java lauten (inkl. Anführungszeichen für den String):

Da auch unendlich (bei HTML z. B. Zeilenumbrüche) Leerzeichen vorkommen können, empfehle ich einen nicht so starren Regex (inkl. Anführungszeichen für den String):

Regex: "?\s+"? Java: "\"?\\s+\"?"
Gib diesen Code einfach mal in Regextester (z. B. regextester.com) ein. Da bekommst du direkt eine Erklärung, was dieses Ding macht.

Tipp bei “” brauchst du in Java-Strings immer “\”. Wenn du also genau einen Backslash zu matchen hast, bekommst du “\\”. Einmal für Java, einmal für den Patterncompiler :wink:.

Hey,

ist jetzt eig. nicht mehr so wichtig, aber ich wollte generell an Leerzeichen (" ") splitten, außer die zwischen Anführungszeichen. Hab da nen Algoritmus geschrieben, der funktioniert aber nur, wenn der StreamInput genau 2 Mal Anführungszeichen enthält (Bsp: Das ist “ein wichtiger” Test), sonst leider nicht.

LG, DMan