2016-08-05 8 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) 

明白な問題は2つの小数点(COL_C)間のカンマです。

今、私はあなたにこの問題に関する良い解決策があるかどうか尋ねています。私は実際には、異なる列を受け取るために1つの分割を使用したいと考えています。しかし、どうすれば10進数の記述で間違った分割を避けることができますか?

私は皆さんが私の問題を理解できることを願っています。英語は母国語ではありません。

+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のparanthesesによると、常に列のサイズである番号を持っています。 –