2016-08-05 96 views
0

我有一個任務將列從SQL語句中分離出來。這對我來說很有效,在「,」上進行簡單的Java分割。但是現在我在列中出現了一個額外的逗號問題。 我想這個問題的答案很簡單,但它不會進入我的腦海。一個簡單的SQL正則表達式的問題

實施例:

來源:

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

我想要的輸出:

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

真正的(和abvious)輸出:

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) 

明顯的問題是兩位小數之間的逗號(COL_C)。

現在我問你是否在這個問題上有一個很好的解決方案。我真的想用一個拆分來接收不同的列。但是,我如何避免小數點描述錯誤的分割。

我希望你們能理解我的問題。英語不是我的母語。

+1

你身邊',','分裂( 「」)'空間。否則,使用'split(「\\ s *,\\ s *(?![^)] * \\))」)'(這更像是一種解決方法,稍後會失敗,稍後會有一些輸入,最好是使用*匹配*方法)。 –

+0

你可以給你用於這個輸出的代碼嗎? –

+0

那空間對我來說太明顯了。我原來的聲明是由DB2-Look創建的。空間應該在每一次。我會試一試,謝謝你的回覆 –

回答

1

你只用正則表達式拆分給定的字符串:,(?!\d)

查找其後面沒有數字的,

代碼示例:

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

謝謝,幫了我很多 –

+0

但是,這仍然與括號內的逗號相匹配。 –

+0

是的。但是根據總是有作爲欄的大小的號碼的OP禁止。 –