【问题标题】:Adding Regex Matches to HashMap and Accessing Them将正则表达式匹配添加到 HashMap 并访问它们
【发布时间】:2012-09-21 14:20:30
【问题描述】:

基本上,我想拿一堆:

<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
}

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

【问题讨论】:

  • 1.您的源代码看起来像 XML,那么为什么您不直接使用 XML 解析器并将它们添加到您的地图中呢? 2. HaspMap使用Key/Value,matcher()返回一个String。

标签: android regex hashmap


【解决方案1】:

(我看到您正在尝试使用正则表达式解析 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));

【讨论】:

  • 谢谢。问题是 (.*) 很贪心。
  • 你把你的货币类型和货币价值括在括号中,即“( )”使它成为一个逻辑组,不是那么容易吗?很好的答案@KennyTM
【解决方案2】:

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

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

编辑:

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

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

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

【讨论】:

  • 问题是我应该把捕获的字符串放在currency="[here]"之间而不是美元符号。我不知道如何访问它。我尝试了 matcher.group(2),但它不起作用。
  • @ColorWP.com 请看我已经编辑了我的答案,您的问题是您应该生成正则表达式,以便获得两个逻辑组,一个用于类型,另一个用于值。
猜你喜欢
  • 2010-12-19
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
  • 2021-03-13
相关资源
最近更新 更多