Hashtable和String值错误

时间:2017-02-23 14:06:18

标签: android string hashtable

我有一个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哈希表只保存第一个值并忽略第二个值,任何想法为什么会发生这种情况?

P.S:result2中的答案应该是:

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

1 个答案:

答案 0 :(得分: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]