2012-07-04 94 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

相关问题