【问题标题】:Count occurrences of strings in Java计算Java中字符串的出现次数
【发布时间】:2011-06-14 03:46:16
【问题描述】:

有没有一个好的类可以统计java中特定字符串的出现次数?我想保留一份姓名列表,然后为每个姓名创建唯一的电子邮件地址。对于每次出现的姓氏,我想将关联的数字加一。

例如:如果我有 3 个姓 Smith 的人,我希望他们的地址是 smith1@(地址)、smith2@(地址)和 smith3@(地址)。我看到了一个“地图”类,但我似乎无法正确初始化它。有没有可以用来保存字符串列表及其出现的类?

【问题讨论】:

标签: java string class count


【解决方案1】:

Map 将是一个可行的数据结构,如果您只是想计算具有给定姓氏的电子邮件的数量。键是字符串(姓氏),值是整数(出现次数)。

您将其实例化如下:

Map<String, Integer> nameOccurrences = new HashMap<String, Integer>();

向地图添加值:

nameOccurrences.put("Smith", 1);

检查名字是否在地图中:

if (nameOccurrences.containsKey("Smith")) { ... }

从地图中获取值:

Integer occurrences = nameOccurrences.get("Smith");

请注意,不同大小写的名称将被视为不同的键。如果您需要忽略大小写,则必须先将键全部设为大写,然后再将它们添加到 Map。

【讨论】:

  • Kaleb,感谢您详细说明。我认为你已经明确了我想要它做的事情。
  • 如果你走这条路,你可能会发现对数据集进行两次迭代会更干净。首先,简单地将每个名称的 0 放入映射中(当名称已经存在时,它没有害处)。在第二遍中,查找名称的值(保证从第一遍开始就存在),添加一个,然后将其保存回地图。我发现这比检查条目是否存在并根据答案做不同的事情更干净。
【解决方案2】:

Bag 是您要查找的数据结构。 Multiset 是来自 google-guava 库的 Bag 实现。

【讨论】:

  • 对于张贴者来说似乎有点矫枉过正——因为他/她不知道 HashMap 是什么。不过,只是我的 2 美分。
  • 这两种方法都无济于事,因为它们只计算出现次数,但实际上并没有保存多个项目。
  • 我不同意。给定 Map/Bag,一个简单的实用程序函数负责生成电子邮件地址。你真的不能指望一个内置的数据结构来做到这一点,当然。
  • @cHao 也许,但这不是一个好主意。没有真正的方法可以提供帮助。
  • 是的 Mike,我是一个 java 菜鸟,我想我会选择 HashMap。在浏览 API 之后,我似乎只需要它。感谢大家的意见:)
猜你喜欢
  • 1970-01-01
  • 2017-09-24
  • 2011-02-07
  • 2014-04-24
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
  • 2020-02-21
相关资源
最近更新 更多