与多个字母和字母的字符串拆分android

标签: Java Android
发布时间: 2017/3/19 18:21:44
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

很新的 android java 和我有一个简单的问题。我有字符串比如像这样︰

P:38,AS:31,DT:231,AR:21

我想要这分成 4 不同窗体的列表︰

P(list)  = 38
AS(list) = 31
DT(list) = 231
AR(list) = 21

我试着分裂,但它没完成这项工作......

解决方法 1:

只要键字母并总是总是为值的整数,可以使用正则表达式来分析这些字符串︰

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+)*)"是一个正则表达式匹配至少一个大写字母 ( [A-Z]+ ) 后跟一个冒号 ( : ) 后跟以逗号分隔的一更多数字 ( \\d+(?:,\\d+)* )。一个单一的号码组成一个更多位数 ( \\d+ )。其他括号中允许我们晚些时候访问各个部分的输入的字符串使用 group(int) 方法调用。

java.util.regex.Matcher 类允许我们遍历的单独部分的输入字符串,我们正则表达式匹配。 find() 方法返回 true ,只要在我们输入的字符串相匹配的正则表达式中还有另一个子字符串。所以与输入字符串 "P:38,45,AS:31,DT:231,345,678,AR:21" while 循环将执行四倍和 matcher 变量将 point 对以下四个输入字符串的子字符串︰

  • P:38,45
  • AS:31
  • DT:231,345,678
  • AR:21

然后,我们可以使用 matcher group(int) 方法来访问各部分的每个子串。 matcher.group(1) 访问被占领的我们正则表达式的第一个括号的文本 ( ([A-Z]+) ) 对应于 "P""AS""DT" ,和 "AR" 在单个循环迭代。类似地, matcher.group(2) 对应的正则表达式的第二个括号 ( (\\d+(?:,\\d+)*) ),将返回 "38,45""31""231,345,678" ,和 "21" 。因此,在第一个迭代的 while 循环 key 将举行 "P"fields 将举行一个字符串数组, ["38", "45"] 。我们然后可以将字段解析为实际整数值使用 Integer.parseInt(String) 和存储的键和值在 Hashtable ,我们以后可以检索各个键的值。例如, result.get("DT") 将返回一个整数值数组 [231, 345, 678]

赞助商