我有一个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}
答案 0 :(得分:3)
您的值在数字之间包含,
,因此您需要使用
([A-Z]+):
:捕获一个或多个字母并匹配:
字符
(\\d+(?:,\\d+)*)
:\\d+
一个或多个数字
(?:,\\d+)*
*
零次或多次,\\d+
输出:
P [5, 22]
AS [29, 34]
DT [995, 12]
AR [23, 121]
SE [5, 22]