【问题标题】:Using split method to store values in HashMap使用 split 方法在 HashMap 中存储值
【发布时间】:2015-08-14 06:13:11
【问题描述】:

我有一个格式如下的字符串:

"(1,X) (3,2) (5,2) (7,2)"

基本上第一个元素可以是任何正整数,第二个元素要么是'1',要么是'X'或'2'。字符串可以有不同的长度,最小为一个元素。我想拆分这个字符串并存储每个

(int, String) 

在 HashMap 中配对,int 作为键,String 是对象。我不太确定如何在这里使用 split 方法,如果能提供简短的指导,我将不胜感激。

【问题讨论】:

  • 互联网(以及本网站)充斥着正是您想要的示例。为什么不在寻求帮助之前通过搜索来帮助自己?
  • @MarsAtomic 我做过,但我发现的所有示例都涉及将结果存储在数组中,而不是 HashMap
  • 此外,搜索如何将数组的内容移动到哈希图中有什么问题,这似乎是您真正的问题? Stack Overflow 上已经有人问过这个问题。我通过搜索找到它。
  • 我会很感激一个链接或一些关于如何做到这一点的帮助,而不是长时间讨论我为什么找不到它
  • Store an array in HashMap 的可能重复项

标签: java string split hashmap


【解决方案1】:

你似乎在寻找的是

for each data like "(number,[1 OR X OR 2])" in text
    map.put(number, value)

您可以使用 Pattern/Matcher 轻松完成。所以你需要像

这样的代码
Map<String,String> map = new HashMap<>();
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(data);
while(m.find()){
    map.put(m.group("number"), m.group("value"));
}

你的正则表达式可能看起来像[(](?&lt;number&gt;\d+),(?&lt;value&gt;[1X2])[)]

  • [(] 代表( 字面量
  • (?&lt;number&gt;\d+) 表示名为 number 的组,存储一位或多位数字
  • (?&lt;value&gt;[1X2]) 代表名为value 的组,存储1X2
  • [)] 代表) 字面量

【讨论】:

  • 非常感谢,我遇到的唯一问题是正则表达式中的“不支持此命名组合成器”。我应该先声明这些组还是我错过了什么?
  • 您使用的是哪个版本的 Java? Java 7 中添加了命名组。
  • Android Studio,版本 1.7
  • 但是如果你仍然有问题你可以使用组索引而不是他们的名字(索引从1开始):ideone.com/e5GM3f
  • 这是我的代码和我在底部写的错误。 ideone.com/YAKO44
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
相关资源
最近更新 更多