2012-07-04 100 views
2

有人可以給我以下的正則表達式的建議嗎?如何將具有不同值的字符串拆分爲多個分隔符?

例子:city^chennai|country^India~TamilNadu|pincode^600034

預計分隔字符串是:

city 
chennai 
country 
India,TamilNadu 
pincode 
600034 

注:~應轉換成,

+0

不能使用YOUR_STRING_VARIBLE.replace( 「^」, 「 」).replace(「 |」,」「).replace (「〜」,「,」) –

回答

4

只是用逗號替換~後非字字符(不包括逗號)拆分:

input.replaceAll("~",",").split("[^\\w,]"); 

然後(根據需要地圖評語)迭代中對所得到的陣列上方,加入地圖條目。

下面是一些測試代碼:

public static void main(String[] args) { 
    String input = "city^chennai|country^India~TamilNadu|pincode^600034"; 
    String[] things = input.replaceAll("~", ",").split("[^\\w,]"); 
    Map<String, String> map = new HashMap<String, String>(); 
    for (int i = 0; i < things.length; i+=2) { 
     map.put(things[i], things[i+1]); 
    } 
    System.out.println(map); 
} 

輸出:

{pincode=600034, country=India,TamilNadu, city=chennai} 
+0

我忘了在這裏添加一個點..我需要將它們保存爲鍵值 - Map 。 – Kathir

+0

沒問題 - 請參閱編輯答案 – Bohemian

+0

我看不到編輯的答案地圖<字符串,字符串> ..是瀏覽器刷新問題? – Kathir

0
((w+)[|^~])*(w+) 

編輯:現在我注意到,它的地圖狀,所以或許:

((w+)^(w+)|)*(w+)^(w+) 

[...]中的自定義類替換w +以使〜也可以工作。

Pattern p = Pattern.compile("((w+)^(w+)|)*(w+)^(w+)"); 
Matcher m = p.matcher("city^chennai|country^India~TamilNadu|pincode^600034"); 
if(m.matches()){ 
    for(int i = 1; i < m.groupCount(); i+=2) { 
     // m.group(i) and m.group(i+1) gives you the values. 
    } 
} 

如果你想更簡單的方法,使用Pattern#split("")

http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#split%28java.lang.CharSequence%29

+0

如果你可以添加一小部分代碼片段,這將會非常有幫助。 – Kathir

+0

你能否粘貼代碼片段來更好地理解你的方法? – Kathir

+0

取決於你真正想做什麼 - 轉換爲不同的字符串?然後使用正則表達式。或分裂並在Java中使用?那麼也許使用我建議的另一種方法。 –

0

你可以使用這個:

.replaceAll("~", ",").split("[|^]") 

假設字符串正確分手了,你可以把它們組通過將索引2k處的字符串映射到索引(2k + 1)而成名稱 - 值對:

+0

謝謝..上述表達工作正常。 – Kathir

相關問題