Android java非常新,我有一个简单的问题。我有字符串,例如:
P:38,AS:31,DT:231,AR:21
我想将其分成以下形式的4个不同列表:
P(list) = 38
AS(list) = 31
DT(list) = 231
AR(list) = 21
我试过拆分,但它没有完成工作......
答案 0 :(得分:2)
只要键始终为字母且值始终为整数,您就可以使用正则表达式来解析这些字符串:
Hashtable<String, int[]> result = 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 i=0; i<values.length; i++)
values[i] = Integer.parseInt(fields[i]);
result.put(key, values);
}
"([A-Z]+):(\\d+(?:,\\d+)*)"
是一个regular expression,至少匹配一个大写字母([A-Z]+
),后跟一个冒号(:
),后跟另外一个以逗号分隔的数字({ {1}})。单个数字由另外一个数字(\\d+(?:,\\d+)*
)组成。附加括号允许我们稍后使用\\d+
方法调用访问输入字符串的各个部分。
java.util.regex.Matcher
类允许我们遍历输入字符串中与正则表达式匹配的各个部分。只要我们的输入字符串中有另一个与正则表达式匹配的子字符串,find()
方法就会返回group(int)
。因此,对于输入字符串true
,"P:38,45,AS:31,DT:231,345,678,AR:21"
循环将执行四次,while
变量将指向输入字符串的以下四个子字符串:
matcher
P:38,45
AS:31
DT:231,345,678
然后我们可以使用AR:21
的{{3}}方法来访问每个子字符串的各个部分。 matcher
访问我们的正则表达式(matcher.group(1)
)的第一个括号捕获的文本,该文本对应([A-Z]+)
,"P"
,"AS"
和{{ 1}}在各个循环迭代中。类似地,"DT"
对应于正则表达式("AR"
)的第二个括号,它将返回matcher.group(2)
,(\\d+(?:,\\d+)*)
,"38,45"
和"31"
。因此,在"231,345,678"
循环"21"
的第一次迭代中,while
将保持key
,而"P"
将保留字符串数组fields
。然后,我们可以使用group(int)
将字段解析为实际的整数值,并将键和值存储在Integer.parseInt(String)
中,以便稍后检索各个键的值。例如,["38", "45"]
将返回值为result.get("DT")
的整数数组。
答案 1 :(得分:0)
正如@pobybolek所说,你可以使用他编写的方法获取字符串并将其转换为哈希表,哈希表使用键,然后使用键后的int值。 int值存储在数组中,键是字符串。
comp1Fn()
上面的代码将给定的字符串拆分为其键,并将键后的值拆分为整数数组,这也可以更改为String键,String []数组,如我代码的第二行所示。