将正则表达式匹配添加到HashMap并访问它们

时间:2012-09-21 14:20:31

标签: android regex hashmap

基本上,我想采取一些:

<Cube currency="USD" rate="1.2954"/>

并将它们放入格式为:

的散列图中
String USD, String 1.2954

我有以下代码:

Map<String, String> list = new HashMap<String, String>();
Pattern p = Pattern.compile("<Cube\\scurrency='(.*)'\\srate='(.*)'/>");
Matcher matcher = p.matcher(currency_source);
while (matcher.find()) {
    list.put(matcher.group(1)); // PROBLEMATIC
}

我不知道如何正确地将货币和费率添加到哈希地图。

2 个答案:

答案 0 :(得分:3)

(我看到你正在尝试使用正则表达式解析XML。也许你应该考虑使用XML解析器,例如Is there an easier way to parse XML in Java?

首先,你的正则表达式是错误的,因为(.*)太贪心了。将其更改为:

Pattern p = Pattern.compile("<Cube\\scurrency='([^']*)'\\srate='([^']*)'/>");

以便'不匹配。其次,.put() method只需要在其2个参数中获取键和值。所以你可以使用:

list.put(matcher.group(1), matcher.group(2));

答案 1 :(得分:1)

MapHashMap按键值对模型工作,如果您想添加键和值对,我认为货币是您的关键,并评估您的价值,您会这样做,

map.put("$", matcher.group(1));

编辑:

尝试改进您的正则表达式,以便它为您提供两个不同的组,第一组是货币类型,第二组是您将其放入地图的货币值

map.put(matcher.group(1),matcher.group(2));

对于正则表达式生成,我使用TX2RE,使用它来生成正确的正则表达式。