2017-02-23 84 views
1

我有一个master_string具有从pHp数据库检索到的值。它们是:散列表和字符串值错误

{"P":[["5"],["22"]],"AS":[["29"],["34"]],"DT":[["995"],["12"]],"AR":[["23"],["121"]],"SE":[["5"],["22"]]} 

和去除特殊字符后,该字符串现在是:

P:5,22,AS:29,34,DT:995,12,AR:23,121,SE:5,22 

现在,当我试图将其转换成一个Hashtable的一些值,它应该给我2倍的值,但它只给我一个。我的代码为这部分是

String input = master_string; 
Hashtable<String, int[]> result2 = new Hashtable<String, int[]>(); 
Pattern pattern = Pattern.compile("([A-Z]+):(\\d+(?:\\d+)*)"); 
Matcher matcher = pattern.matcher(input); 

while (matcher.find()) 
{ 
    String key = matcher.group(1); 
    String[] fields = matcher.group(2).split(","); 

    int[] values = new int[fields.length]; 
    for (int pqr=0; pqr<values.length; pqr++) 
    { 
     values[pqr] = Integer.parseInt(fields[pqr]); 
    } 
    result2.put(key, values); 
} 

每个字母表是其值之后直到找到另一个键的值的关键。我发现result2散列表只保存第一个值,忽略第二个,任何想法为什么会发生这种情况?

PS:在RESULT2答案应该是这样的:

P = {5, 22} 
AS = {29, 34} 
DT = {995, 12} 
SE = {5, 22} 

回答

3

你的价值观包含数字之间,所以你需要使用

([A-Z]+):(\\d+(?:,\\d+)*)

([A-Z]+):考虑它:捕获一个或多个字母和匹配:字符

(\\d+(?:,\\d+)*)\\d+一个或多个数字

  • (?:,\\d+)**零个或更多的,\\d+

出现输出:

P [5, 22] 
AS [29, 34] 
DT [995, 12] 
AR [23, 121] 
SE [5, 22] 
+1

你的先生是一个救星,来自邻国的荣誉给你我的兄弟! –

+1

@SaimMahmood谢谢你的赞赏,我很高兴我可以帮忙,快乐的编码 –

+0

和你在回答中提到的网站非常好,再次感谢! –