2016-08-05 4 views
0

Ich habe eine Aufgabe, um die Spalten aus einer SQL-Anweisung zu trennen. Dies funktionierte gut für mich mit einem einfachen Java Split auf ",". Aber jetzt habe ich ein Problem mit zusätzlichen Kommas in der Spalte. Ich denke, die Antwort auf dieses Problem ist ziemlich einfach, aber es wird mir nicht in den Sinn kommen.Probleme mit einem einfachen SQL-Regex

Beispiel:

Quelle:

"Col_A BIGINT , COL_B TIMESTAMP , COL_C DECIMAL(10,30) , COL_D VARCHAR(20)" 

Mein gewünschten Ausgang:

Array[0] = Col_A BIGINT 
Array[1] = COL_B TIMESTAMP 
Array[2] = COL_C DECIMAL(10,30) 
Array[3] = COL_D VARCHAR(20) 

Die reale (und abvious) Ausgabe:

Array[0] = Col_A BIGINT 
Array[1] = COL_B TIMESTAMP 
Array[2] = COL_C DECIMAL(10 
Array[3] = 30) 
Array[4] = COL_D VARCHAR(20) 

Das offensichtliche Problem ist das Komma zwischen den zwei Dezimalstellen (COL_C).

Jetzt frage ich Sie, ob es eine nette Lösung für dieses Problem gibt. Ich möchte wirklich einen einzigen Split verwenden, um die verschiedenen Spalten zu erhalten. Aber wie kann ich die falsche Aufteilung bei der Dezimalbeschreibung vermeiden?

Ich hoffe, Sie können mein Problem verstehen. Englisch ist nicht meine Muttersprache.

+1

Sie haben Räume um ',', 'split ("")'. Sonst, benutze 'split (" \\ s *, \\ s * (?! [^)] * \\)) ")' (es ist eher ein Workaround, dass mit einigen Eingaben später fehlschlägt, am besten zu benutzen * übereinstimmender * Ansatz). –

+0

Können Sie den Code angeben, den Sie für diese Ausgabe verwenden? –

+0

Nun, die Räume waren zu offensichtlich für mich. Meine ursprüngliche Anweisung wird von einem DB2-Look erstellt. Die Räume sollten jedes Mal dort sein. Ich werde es versuchen, danke für die Antwort –

Antwort

1

Sie spalten nur die angegebene Zeichenfolge mit Regex: ,(?!\d)

die , finden, die nicht von Ziffer folgt.

Codebeispiel:

System.out.println(Arrays.toString("Col_A BIGINT , COL_B TIMESTAMP , COL_C DECIMAL(10,30) , COL_D VARCHAR(20)".split(",(?!\\d)"))); 

Demo and Explaination of regex

+0

Danke, dass geholfen hat –

+0

Allerdings passt dies immer noch Kommas in Klammern. –

+0

Ja. Aber laut OP-Parantheses immer Zahl, die Größe der Spalte ist. –