有人可以为我提供以下正则表达式的建议吗?
示例:city^chennai|country^India~TamilNadu|pincode^600034
预期的分隔字符串是:
city
chennai
country
India,TamilNadu
pincode
600034
注意:~
应转换为,
答案 0 :(得分: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}
答案 1 :(得分: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("")
答案 2 :(得分:0)
你可以使用它:
.replaceAll("~", ",").split("[|^]")
假设String被正确拆分,您可以通过将索引2k处的String映射到索引(2k + 1)
将它们分组为名称 - 值对答案 3 :(得分:0)
您可以在此处使用StringTokenizer
类来拆分具有不同分隔符的字符串。
使用hasNextToken("delimiterHereAsString")
方法指定要拆分的不同分隔符。
此链接可能会对您有所帮助。 http://www.java-examples.com/java-stringtokenizer---specify-delimiter-example