4

如何在 Java 中获取出现在字符串中的所有字符的列表,以及它们的出现次数?假设我们有一个字符串“我现在真的很忙”,所以我应该得到:

i-2、a-2、r-2、m-1 等。

4

4 回答 4

6

只需映射每个字符及其数量即可。您可以使用增强的 for 循环String获取usingString#toCharArray()和循环的字符数组。在每次迭代中,从映射中获取计数,如果不存在则设置它,然后将其递增 1 并放回映射中。很简单。

这是一个基本的启动示例:

String string = "I am really busy right now";
Map<Character, Integer> characterCounts = new HashMap<Character, Integer>();
for (char character : string.toCharArray()) {
    Integer characterCount = characterCounts.get(character);
    if (characterCount == null) {
        characterCount = 0;
    }
    characterCounts.put(character, characterCount + 1);
}

要了解有关地图的更多信息,请查看有关该主题的 Sun 教程


您评论说它是“针对一个项目”的,但它是一个典型的家庭作业问题,因为它非常基础,并且在一本像样的 Java 书籍/教程的第一章中都有介绍。如果您是 Java 新手,我建议您阅读Sun Trails Covering the Basics

于 2010-05-31T00:09:24.853 回答
0

我不确定您的确切需求,但似乎您想计算出现次数而不管大小写,也许还会忽略空格等字符。所以您可能想要这样的东西:

String initial = "I   am really   busy  right now";

String cleaned = initial.replaceAll("\\s", "") //remove all whitespace characters
        .toLowerCase(); // lower all characters

Map<Character, Integer> map = new HashMap<Character, Integer>();
for (char character : cleaned.toCharArray()) {
    Integer count = map.get(character);
    count = (count!=null) ? count + 1 : 1;
    map.put(character, count);
}

for (Map.Entry<Character, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " : " + entry.getValue());
}

调整正则表达式以满足您的确切要求(跳过标点符号等)。

于 2010-05-31T00:57:13.307 回答
0

是作业吗?在不知道的情况下,我会假设一个尽力而为的答案。

你的问题背后的逻辑是

  • 一次遍历列表中的一个字符
  • 计算那个字符:因为可能的字符(不包括 unicode)只有 256 个,所以你可以有一个 256 的数组int并在那里计算它们:这样你就不需要搜索正确的计数器,而只需增加正确的索引。
于 2010-05-30T23:58:02.037 回答
0
        String input = "AAZERTTYAATY";
        char[] chars = input.toCharArray();
        Map<Character, Integer> map = new HashMap<>();
        for (char aChar : chars) {
            Integer charCount = map.putIfAbsent(aChar, 1);
            if (charCount != null) {
                charCount++;
                map.put(aChar, charCount);
            }
        }
于 2020-08-08T09:40:45.820 回答