2012-11-15 124 views
1

我正在尋找一種方式來對某個分離的抗凍發生分成兩個部分的字符串。我知道這是很容易做到當字符串看起來是這樣的:分割字符串沒有遵守「」

String s = "prefix.key value"; 
String[] a = s.split("[ :=]",2); 

但是按照慣例,該字符串可能包含轉義分隔符(用「\」直接在分離器的前面)。所以我更新的正則表達式字符串:

String s = "prefix\ key value"; 
String[] a = s.split("[^\\\\][ :=]",2); 

此分割字符串幾乎在正確的地方,但它切斷了關鍵的「Y」。這是因爲現在正則表達式匹配分隔符和前面的字符。 split()方法刪除匹配的部分,只返回剩餘的字符串。

我有一個使用分裂(),並期待通過字符串返回數組中的結束字符一個有效的解決方案,但是這似乎是一個過於複雜和緩慢的方式來做到這一點。

有沒有人有更好的主意?

+0

那是什麼':'在你的字符類? –

+0

它用作分隔符,就像空白和等號一樣。 – l2p

回答

1

使用negative lookbehind assertion

String[] a = s.split("(?<!\\\\)[ :=]",2); 

所以你的性格類將只匹配,如果它不是由\

+0

謝謝這正是我一直在尋找。 – l2p

0

我會下STEMA的答案評論之前,但我沒能尚未就此發表評論。我只是想對提出的正則表達式提出小小的改動。

(?<!\\)[ :=] 

否則轉義碼將需要兩個反斜槓而不是一個反斜槓。

+0

這雙轉義是唯一的Java,因爲Java沒有像逐字/原始字符串 – stema